php mvc

- 1 هفته پیش
توسط علی بیات آپدیت شد
Ali Ghaleyan ( 2430 تجربه )
1 هفته پیش

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

بهترین پاسخ انتخاب شده توسط Ali Ghaleyan
علی بیات
1 هفته پیش

@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 ( 95 تجربه )
1 هفته پیش

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

علی بیات ( 48117 تجربه )
1 هفته پیش

@Serjik

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

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

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

Ali Ghaleyan ( 2430 تجربه )
1 هفته پیش

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

علی بیات ( 48117 تجربه )
1 هفته پیش

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

function calculatePrice(array $data) {

}

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

Ali Ghaleyan ( 2430 تجربه )
1 هفته پیش

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

علی بیات ( 48117 تجربه )
1 هفته پیش

@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,
        ]);

    }

}

موفق باشید.

برای ارسال پاسخ باید وارد سایت شوید