آموزش لاراول – ایجاد فیلتر داخل کنترلرها

  • خانه
  • آموزش لاراول – ایجاد فیلتر داخل کنترلرها
Image تحقیقات

آموزش لاراول – ایجاد فیلتر داخل کنترلرها

با سلام خدمت دوستان عزیز

امروز میخوام درباره نحوه ایجاد فیلتر داخل کنترل های فریم ورک لاراول صحبت کنم

به صورت معمول ، فیلتر ها داخل فایل filters.php تعریف میشن و در فایل route.php هنگام نوشتن route ها آنها را صدا میزنیم و استفاده می کنیم.

تو این جلسه میخوام اینو خدمتتون عرض کنم که علاوه بر اینکه فیلترها را داخل فایل route.php صدا می زنیم. می توانیم آنها را داخل کنترل هامون هم صدا بزنیم و تعیین کنیم کدام فانکشن نیاز به چک کردن فیلتر دارد و کدام ندارد.

در واقع به این روش در لاراول ، Controller Filters می گویند.

خب شروع میکنیم.

به فرض قبلا همچین فیلتری رو داخل فایل route.php می نوشتیم  :

Route::get('profile', array('before' => 'auth',
            'uses' => 'UserController@showProfile'));

کد بالا باعث می شد قبل از اینکه در کنترلر userController متد showprofile صدا زده بشه ، فیلتری به نام auth چک شود.

حاالا این کد رو به گونه ی زیر می توانیم بنویسیم.(البته از میان خط های 8 ، 10 ، 12 یک خط لازم هست.)

class UserController extends BaseController {

    /**
     * Instantiate a new UserController instance.
     */
    public function __construct()
    {
        $this->beforeFilter('auth', array('except' => 'getLogin'));

        $this->beforeFilter('csrf', array('on' => 'post'));

        $this->afterFilter('log', array('only' =>
                            array('fooAction', 'barAction')));
    }

}
  •  وقتی بخواهیم  به جای فایل route.php در کنترلرهامون فیلترها رو صدا بزنیم ، باید حتما آنها را داخل تابع سازنده بنویسیم.
  • در خط 6 تابع سازنده ایجاد شده است.
  • در خط 8 از تابع beforeFilter استفاده شده است.این تابع دو پارامتر می گیرد اولین پارامتر اسم فیلتر و دومین پارامتر تعیین میکند که فیلتر را در کدام متدها اجرا کند.در این خط فیلتری به نام auth قبل از اجرا شدن تمام متدهای این کنترلر به غیر متد getlogin اجرا و چک می شود.
  • در خط 10 تعیین شده فیلتری به نام csrf قبل از اجرا شدن متدهایی که از نوع post هستند اجرا و چک شود.
  • در خط 12 تعیین شده فیلتری به نام log فقط بعد از اجرا شدن متدهایی به نام fooAction و barAction اجرا و چک شود.

 

خب پس دیدیم میتوانیم فیلترها رو در داخل کنترلرها تعیین کنیم.

به مثال زیر توجه کنید .

مثال : مثلا میخواهیم قبل از اجرا شدن متدها ، کلمه ی ali چاپ شود.

class UserController extends BaseController {

    /**
     * Instantiate a new UserController instance.
     */
    public function __construct()
    {
        $this->beforeFilter(function()
        {
            echo 'ali';
        });
    }

}

 

در مثال بالا باز از تابع beforeFilter استفاده شده با این تفاوت که به جای پارامتر اول یک Closure (تابع بدون نام) قرار داده است و داخل اون تابع تعیین کرده عبارت ali چاپ شود.

خب اینم از آموزش لاراول

تا جلسه ی بعد .