برنامه نویس مبتدی ولی سخت کوش ( آکادمی لامینور laminor.org)
کلاسهای تک اکشن در کنترلر لاراول با متد __invoke()
سلام دوستان . تو این مقاله میخوام درباره کلاس های تک اکشن تو لاراول صحبت کنیم . و اینکه اصلا به چه کاری میاد این روش استفاده از کنترلر .
بعضی وقتا کنترلر شما بجز متد های show , update , store , index , delete, ... شامل خیلی متدهای دیگه هم شاید باشه . اونوقت که هر وقت سروکارت به این کنترلر بیوفته باید کلی دنبال کدهاتون بگردید و ... وای به روزی که داکیومنت نویسی هم نکرده باشی ...
متد جادویی invoke در php :
زبان php یکسری متد پیشفرض داره به اسم مجیک متد ( magic method ) . یا همون متدهای جادویی .
این متدها با ۲ تا آندرلاین ( ــ ) شروع میشن . این اسامی توسط php رزرو شدن و شما نمیتونید اسم متدهاتون رو شبیه شون بزارید .
تو php ورژن 5.3 یه متدی جادویی به اسم __invoke اضافه شد. __invoke() یک تابع magic در php است و هنگامی که ما میخواهیم یک نمونه از کلاس ایجاد کنیم یا به این کلاس فراخوانی کنیم __invoke() به صورت خودکاربارگیری میشود.
ایجاد کلاس تک اکشن در کنترلر :
برای اینکه کنترلرمون رو خلوت کنیم کافی مثلا برای یکی از متدهایی که تو کنترلرمون داریم ، یه کلاس جداگونه بسازیم . مثلا من مدل Book دارم و یه کنترلر BookController .
این کنترلر ما یه متد داره مثلا به اسم registerBook . کافی ما یه کنترلر بسازیم برای این متد :
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class RegisterBookController extends Controller {
public function __invoke() {
// any things
}
}
حالا هرکاری که قرار بود این متد انجام بده داخل متد invoke بنویسید .
برای این کنترلر هم باید روت مخصوص به خودش نوشته بشه :
Route::post('registerBook', 'RegisterBookController');
نکته : اگر از این روش استفاده کنید نمیتونید از resource روت ها استفاده کنید !
ما تونستیم با این کار یه متد از کلاس کنترلر اصلی Book کم کنیم و کدمون رو واضح تر کنیم .
امیدوارم این چند خط نوشته به درد شما بخوره .
موفق باشید .
مطلبی دیگر از این انتشارات
ایجاد یک سایت دو زبانه در لاراول
مطلبی دیگر از این انتشارات
بخشی از سیستم تست در لاراول به صورت ساده
مطلبی دیگر از این انتشارات
نسخه بتای Laravel Octane منتشر شد