متدهای callback در کیک پی اچ پی

اگر می خواهید قبل و یا بعد از فراخوانی یک فرآیند خاص مانند ذخیره کردن اطلاعات و یا نمایش اطلاعات به کاربر و کارهایی از این قبیل ، عمل خاصی را انجام دهید، راه حل پیش رو ، متدهای callback هستند . این متدها به صورت خودکار اجرا می شوند و در بخش های Controller و Model با توجه به نیازمان ، می توانیم آنها را تعریف کنیم .

Controller

- متد beforeFilter :
یکی از مهم ترین متدهای موجود در این بخش  هست ، که قبل از اجرای هر اکشنی در کنترلر مربوطه فراخوانی می شود( حتی هنگامی که اکشن درخواست شده در کنترلر تعریف نشده باشد)  و بهترین مکان برای انجام کارهایی از قبیل اعتبارسنجی جلسه (session) کاربر ، چک کردن سطح دسترسی کاربر و … هست .

- متد beforeRender :
این متد بعد از اجرای اکشن درخواست شده و قبل از نمایش view به کاربر ، اجرا می شود و آنچنان مورد استفاده ندارد ، اما گاهی وقت ها که نمایش خودکار(autoRender) در کنترلر را غیر فعال کرده ایم و با استفاده از متد render به صورت دستی view را به کاربر نمایش می دهیم ممکن است مورد استفاده قرار بگیرد .

- متد  afterFilter :
بعد از فراخوانی تمامی اکشن های درخواست شده از کنترلر و پس از نمایش view به کاربر اجرا می شود .

کامپوننت های تعریف شده در بخش کنترلر نیز دارای متدهای callback خاص خودشان هستند که برای مطالعه بیشتر در این زمینه می توانید به این لینک مراجعه کنید .

Model

در این بخش به نسبت کنترلر ، متدهای callback کاربردی تری قرار گرفته که در هنگام ذخیره و بازیابی اطلاعات ، کار توسعه دهنده را بسیار راحت خواهد کرد ، به عنوان مثال ، تصور کنید که در حال توسعه یک سیستم بلاگ هستید و نیاز دارید که تاریخ انتشار پست را به صورت شمسی از کاربر دریافت و به صورت میلادی در پایگاه داده ذخیره کنید و مجددا هنگامی که اطلاعات پست را از پایگاه داده می خوانید تاریخ انتشار را به صورت شمسی به کاربر نمایش دهید، به نظرتان بهترین راه حل برای این کار چیست ؟
با استفاده از متدهای beforeSave و afterFind که در ادامه بررسی خواهیم کرد به سادگی می توانیم این کار را انجام دهیم .

- متد beforeFind
این متد قبل از فراخوانی هر متدی به منظور خواندن از پایگاه داده اجرا می شود و امضای آن به شکل زیر است :

beforeFind(mixed $queryData)

یک متغیر به عنوان پارامتر ورودی(queryData$) دریافت می کند که شامل اطلاعاتی از تنظیمات نهایی متد find ، مانند فیلدها ، شرط ها ، تعداد رکورد ها و …  برای خواندن از پایگاه داده است که در زیر یک نمونه از محتویات آن را قرار داده ام :

array(
	'conditions' => null,
	'fields' => null,
	'joins' => array(),
	'limit' => (int) 20,
	'offset' => null,
	'order' => null,
	'page' => (int) 1,
	'group' => null,
	'callbacks' => true,
	'maxLimit' => (int) 20,
	'paramType' => 'named'
)

در صورتی که میخواهید متد find اجرا نشود می توانید مقدار false را برگردانید.

- متد afterFind
نتایج حاصل از اجرای متد find به این متد پاس داده می شود و در صورت نیاز می توان در داده ها تغییرات مورد نظرمان را انجام دهیم و سپس آن را بازگشت دهیم.
به عنوان مثال :

public function afterFind($results,$primary=false){
    foreach($results as $key => $val){
        if(isset($val['Post']['date'])){
            $results[$key]['Post']['date'] = date('Y/m/d',val['Post']['date']);
        }
    }
    return $results;
}

 

- متد beforeValidate
از این متد برای تغییر اطلاعات ارسال شده به Model  و یا تغییر قوانین اعتبار سنجی ، قبل از انجام عملیات اعتبارسنجی (Validates) استفاده می شود و مقدار بازگشتی آن باید true باشد تا متد save اجرا شود .

- متد beforeSave
قبل از ذخیره سازی اطلاعات اجرا می شود و به منظور انجام عملیات ذخیره سازی باید مقدار true بازگرداند در غیر این صورت عملیات ذخیره سازی متوقف می شود.

- متد afterSave

امضای این متد به صورت زیر است :

afterSave(boolean $created)

بعد از انجام عملیات ذخیره سازی فراخوانی می شود و در صورتی که موفقیت آمیز باشد پارامتر created$ مقدار true  و در غیر این صورت مقدار flase خواهد داشت.

- متد beforeDelete
قبل از انجام عمل حذف فراخوانی می شود که امضای آن به صورت زیر است :

beforeDelete(boolean $cascade)

پارامتر وردی این متد cascade$ در صورتی که رکوردهای مربوط به این رکورد (رکوردهایی که به این رکورد وابسته هستند و با هم ارتباط دارند) هم پاک شوند مقدار true خواهد داشت همچنین توجه داشته باشید که برای انجام عملیات حذف این متد باید مقدار true بازگرداند .

- متد afterDelete
این متد نیز بعد از انجام عملیات حذف فراخوانی می گردد.

برای دریافت اطلاعات بیشتر در مورد این متد ها می توانید به این لینک مراجعه نمایید .
رفتار کننده ها (Behavior) تعریف شده در این بخش نیز دارای یکسری متدهای callback برای پیاده سازی هستند که در این لینک می توانید اطلاعاتی در مورد آنها کسب کنید .

در آخر هم باید بگم ، اگر سوال یا مشکلی در رابطه با کیک پی اچ پی دارید می توانید در انجمن فارسی کیک پی اچ پی مطرح کنید .

 


تا كنون يك نظر برای اين پست ثبت شده است


  1. دانلود گقته :

    مرسی ممنون تشکر

    ۲۰ مرداد ۱۳۹۳ در ۶:۰۲ ب.ظ