راکت
حل شده

php mvc

6 پاسخ

سلام خسته نباشید یه سوالی در مورد php mvc داشتم...
داخل لاراول میشه Request رو داخل پرانتز های تابع به کار برد مثلا:
public function(Request $request){
return $request->all();
}
به این کار چه چیزی گفته میشه و اصلا برای چی از این روش استفاده میشه و دقیقا چه کاری انجام میشه؟

ثبت پرسش جدید

پاسخ‌ها

6
علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

بهترین پاسخ

@Serjik

به مثال زیر دقت کنید:

<?php

class FileLogger
{
    public $var = 'Logging data to a file : <br>';

    public function handle($data) 
    {
        echo $this->var . $data;
    }
}

function Logger($data,FileLogger $method)
{
    $method->handle($data);
}

Logger('the information to log here', new FileLogger);

?>
Logging data to a file :
the information to log here

در کد بالا تابع Logger, تنها کارش لاگ کردن داده هاست. چگونگی لاگ کردن داده‌ها سپرده میشه به کلاس FileLogger.
فایده این کار اینه که اگر شما خواستید بعدا اطلاعات رو روی دیتابیس لاگ کنید یه کلاس DBLogger میسازید و اون رو به تابع Logger پاس میدید.( البته روش درست‌ترش استفاده از Interface هست.)

همچنین Type Hinting به علاوه Dependency Injection (تزریق وابستگی‌ها) بصورت عمده در لاراول داره استفاده میشه.

مثلا زمانی که شما برای ثبت یک پست٬ احتیاج به user_id دارید:

use Illuminate\Http\Request;
use App\User;
use App\Post;

Class PostController extends Controller
{
    public function create(Request $request, User $user) {
        Post::create([
            'title' => $request->title,
            'body' => $request->body,
            'user_id' => $user->id,
        ]);

    }

}

موفق باشید.

TRAXEX dw
TRAXEX dw
@traxex.dw

این تابعه متغییر ریکوست و که از نوع ریکوست هست و تو ورودیش دریافت میکنه یعنی اونجای که فرخوانیش میکنی یه متغییر بده بهش از نوع ریکوست

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

@Serjik

گاهی‌ اوقات در تعریف کردن فانکشن‌ها در زبان برنامه‌نویسی PHP نیاز داریم تا پارامترهای ورودی فانکشن مد نظر از نوع خاصی باشند بدین شکل که مثلاً پارامتر ورودی باید آبجکتی از روی کلاسی خاص، یک اینترفیس و یا یک آرایه باشد

به این کار اصطلاحا Type Hinting گفته میشه.

وقتی که قبل از تعریف نام یک آرگومان (مثلا request$) در تابع٬ نام کلاس Request بکار برده میشه...
یعنی این تابع انتظار داره مقداری که به request$ پاس داده میشه یک instance از کلاس Request لاراول باشه.

شاید پاسخ شما همین‌جا باشد

Ali Ghaleyan
Ali Ghaleyan
@Serjik

تخصص: برنامه نویس لاراول

@ali.bayat
درود... خیلی ممنون از توضیحاتتون نمونه کدی از این کار دارید معرفی کنید تا بهتر متوجه بشم
خیلی مشتاقم دقیقتر بدونم که چه کاری انجام میشه

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

@Serjik
یه مثال ساده :

function calculatePrice(array $data) {

}

در تابع بالا ما مشخص کردیم که آرگومان data که به تابع پاس داده میشه باید از نوع آرایه باشه.
حالا اگر بجای array از آدرس یه کلاس استفاده میکردیم٬ یعنی آرگومان data که به تابع پاس داده میشه باید یه شئ ساخته شده از اون کلاس باشه.

Ali Ghaleyan
Ali Ghaleyan
@Serjik

تخصص: برنامه نویس لاراول

@ali.bayat
وقتی از نوع Request هست یعنی $request یک شی ساخته شده از اون هست
چظور میشه یه چیزی شبیه به همین request ها ساخت یعنی کدی باید داخل کلاسی که آدرسش داده میشه نوشت کلا هندل کردنش چطور انجام میشه توی کلاس

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام