برنامه نویس مبتدی ولی سخت کوش ( آکادمی لامینور 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 کم کنیم و کدمون رو واضح تر کنیم .
امیدوارم این چند خط نوشته به درد شما بخوره .
موفق باشید .
مطلبی دیگر از این انتشارات
نگاهی به ویژگیهای جدید لاراول 9
مطلبی دیگر از این انتشارات
چطور امکان «ادمین» را به سایت لاراولی در حال کار اضافه کردم؟
مطلبی دیگر از این انتشارات
ساخت پکیجها در فریمورک لاراول