Ali Ghaleyan
5 سال پیش توسط Ali Ghaleyan مطرح شد
6 پاسخ

php mvc

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


ثبت پرسش جدید
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
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
@traxex.dw 5 سال پیش مطرح شد
1

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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
2

@Serjik

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

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

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


Ali Ghaleyan
تخصص : برنامه نویس لاراول
@Serjik 5 سال پیش مطرح شد
0

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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
1

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

function calculatePrice(array $data) {

}

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


Ali Ghaleyan
تخصص : برنامه نویس لاراول
@Serjik 5 سال پیش آپدیت شد
0

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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
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,
        ]);

    }

}

موفق باشید.


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

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