منبع اصلی نوشتار زیر در این لینک قرار دارد

فیلترها در کنترلر Yii

فیلترها تکه کدهایی هستند که مشخص می کنند که قبل یا بعد از اجرای یک اکشن در کنترلر کنترلر چه اتفاقی بیافتد. برای مثال بوسیله فیلترها میشه بررسی کرد که آیا قبل از اجرای یک اکشن خاص کاربر لاگین کرده یا خیر. یک اکشن می تواند چند فیلتر داشته باشد. برای پیاده سازی فیلتر، کنترلر یک متد filters دارد که یک آرایه بر می گرداند. درون آن آرایه می توان فیلتر های مختلف را برای اکشن ها تعریف کرد.

فیلتر ها به دو صورت پیاده سازی می شوند: ۱- براساس متد، ۲- براساس کلاس. برای اعمال یک فیلتر برای اکشن از علامت + و برای جلوگیری از اجرای فیلتر از علامت – استفاده می شود. به عبارت دیگر اعمال فیلتر تعریف شده فقط شامل  اکشن هایی می شود که با علامت + فیلتر شوند، و اعمال فیلتر تعریف شده فقط اکشن هایی را مستثنی می کند که با علامت – مشخص شوند.

سه فیلتر از نوع متد از قبل داخل کلاس کنترلر تعریف شده اند. این فیلتر ها به نام های: accessControl, ajaxOnly و postOnly هستند که به ترتیب برای اعمال سطح دستری به اکشن خاص، بررسی درخواست های ارسالی از طریق آجاکس برای اکشن باشد و بررسی درخواست های ارسالی از طریق POST برای اکشن باشد. برای مثال:

class PostController extends CController
{
    ......
    public function filters()
    {
        return array(
            'postOnly + edit, create',
            array(
                'application.filters.PerformanceFilter - edit, create',
                'unit'=>'second',
            ),
        );
    }
}

در مثال بالا بررسی می شود که درخواست هایی در اکشن های edit و create پاسخ داده شوند که از طریق POST ارسال شده اند.

تعریف فیلتر

همانطور که در بالا هم بیان شد فیلتر ها دو دسته هستند:۱- براساس متد، ۲- براساس کلاس.

تعریف فیلتر های براساس متد با این صورت است که یک متد جدید در کلاس کنترلر مورد نظر ایجاد کرده که اول نام آن فیلتر باید با کلمه filter آغاز شود و برای ادامه فیلترهای دیگر باید داخل بدنه متد کد جایی داده شود. همچنین یک پارامتر با نام $filterChain که از نوع CFilterChain است را به عنوان ورودی دریافت می کند. به صورت زیر:

public function filterAccessControl($filterChain)
{
    ...
    $filterChain->run();
    ...
}

همچنین برای تعریف فیلتر براساس کلاس به صورت زیر می باشد:

class EnforceLoginFilter extends CFilter
{
protected function preFilter($filterChain)
{
if(Yii::app()->user->isGuest)
{
throw new CHttpException(403,"you must login first");
return false;
}else
return true; // false if the action should not be executed
}
protected function postFilter($filterChain)
{
// logic being applied after the action is executed
}
}
public function filters()
{
return array( array('application.components.EnforceLoginFilter -error login'));
}

امیدوارم که این مطلب مفید بوده باشد.

The post فیلترها در کنترلر Yii appeared first on دست نوشته های یک تازه کار.



برچسب ها : , , , , , ,

به سیاره لینوکس امتیاز دهید

به اين صفحه امتياز دهيد