PDA

View Full Version : مبتدی: سوال در مورد اکشن page در skeleton



desatir7316
یک شنبه 22 دی 1392, 13:38 عصر
سلام دوستان
وقتی skeleton رو می سازیم هرکدوم از index, contact, login براشون توی siteController یه اکشن تعریف شده ولی برای about اکشنی تعریف نشده، پس این قسمت چطوری کار می کنه؟
ممنون

desatir7316
یک شنبه 22 دی 1392, 17:10 عصر
کسی نیست جواب بده؟ مرخصیم داره تموم میشه

MMSHFE
یک شنبه 22 دی 1392, 17:22 عصر
به متد زیر توی کنترلر SiteController دقت کنید:


/**
* Declares class-based actions.
*/
public function actions()
{
return array(
// captcha action renders the CAPTCHA image displayed on the contact page
'captcha'=>array(
'class'=>'CCaptchaAction',
'backColor'=>0xFFFFFF,
),
// page action renders "static" pages stored under 'protected/views/site/pages'
// They can be accessed via: index.php?r=site/page&view=FileName
'page'=>array(
'class'=>'CViewAction',
),
);
}

متد actions برای مدیریت کلی actionهایی هست که نمیخواین یکی یکی براشون متد بنویسید. درواقع actionهایی هستن که جواب هرکدوم رو یک کلاس دیگه قراره بده. برای مثال، آدرس زیر رو تست کنید (با فرض اینکه پوشه سایت Skeleton رو به اسم helloworld ساختین) :
http://localhost/helloworld/index.php?r=site/captcha
میبینید که کد Captcha ظاهر میشه. حالا به کد بالا دقت کنید و ببینید چطور کلاس CCaptchaAction برای جواب دادن به این درخواست تعیین شده.
اما درمورد صفحه about همونطور که میبینید، لینکش اینطوریه:
http://localhost/helloworld/index.php?r=site/page&view=about
و باز هم با نگاه به کد بالا، میبینید که کلاس CViewAction برای جواب دادن به درخواست page مشخص شده. این کلاس طوری تنظیم شده که توی پوشه مربوط به کنترلر مشخص شده در داخل پوشه views، دنبال پوشه pages میگرده و اگه پیداش کرد، نگاه میکنه پارامتر view رو توی آدرس با چه مقداری تنظیم کردین و دنبال همون فایل با پسوند php. میگرده و اون رو Render میکنه. اگه باز هم ابهامی بود، بفرمایید تا بیشتر توضیح بدم.

desatir7316
یک شنبه 22 دی 1392, 19:48 عصر
سلام
ممنون، لطف کردید
می خوام دیدم نسبت به کارکردن این فریم ورک یه کم باز بشه باز بشه

می گم اون آرایه ای که return می شه چند تا کلاس رو بر می گردونه! حالا مثلا کلاس CViewAction کجا هندل می شه و این آرایه به کجا برگردونده می شه؟
کد این کلاس ها هم اگه بگین کجان که دیگه نورعلی النور میشه!

بعد الان توی این return هم برای کپچا هم برای اون پیج خاص همزمان مقدار برگردونده، شاید تو هر لحظه یکی از این ها نیاز باشن، می خواستم بدونم منطق این کار چیه، اگه تعداد زیاد مقادیر این آرایه زیاد بشه همه رو باید تو هر درخواست برگردنه؟

MMSHFE
یک شنبه 22 دی 1392, 20:21 عصر
کلاس CViewAction یکی از کلاسهای توکار خود Yii هست که تو مسیر framework/web/actions/CViewAction.php قرار داره که با یک نگاه بهش متوجه میشین چطوری داره کار میکنه. مثلاً توی فیلد basePath$ مسیر پوشه صفحات مشخص میشه که البته میتونید از این کلاس، خودتون یک کلاس دیگه مشتق کنید و این موارد رو تغییر بدین و اسم کلاس خودتون رو بجای این کلاس معرفی کنید. ضمناً شما آرایه رو تنظیم میکنید و مشخص میکنید که هر درخواست، توسط کدوم کلاس باید جواب داده بشه و خود Yii برحسب نیاز، کلاس رو بارگذاری میکنه و کارها رو بعهدش میگذاره. مثلاً اگه توی صفحه about کد CAPTCHA رو هم بگذارین، خودش وقتی صفحه about درخواست میشه، کلاس CViewAction رو صدا میزنه و وقتی به CAPTCHA رسید، کلاس CCaptchaAction رو بارگذاری میکنه.