خب بقدر کافی از روند کلی کار گفتیم، امیدوارم دستتون اومده باشه که کلاً فریمورک چهجوری کار میکنه. فهم این روند خیلی میتونه در سرعت بخشیدن به شما در کدنویسی کمک کنه.
یک برنامه ساده امروز قصد داریم طراحی کنیم تا بوسیله آن متن سادهای را در صفحه وب نمایش دهیم. در طول آموزش بخشهایی که با Yii نسخه قدیم فرق داشته باشد را متذکر میشوم.
ایجاد Action:
در این برنامه یه Action درست میکنیم به نام say که پارامتر ورودی با نام message میگیرد و آن را به کاربر نشان می دهد.
یادآوری: action شی است که تحت کنترلر گروه بندی میشود و کاربر میتواند از طریق یک لینک مستقیم آن را فراخوانی کند.
فعلاً چون نمیخواهیم قضیه رو خیلی پیچیده کنیم تا بتوانیم خیلی مقدماتی پیش رفته باشیم کنترلر درست نمیکنیم و از کنترلر پیشفرض که خود Yii2 برای ما درست میکند استفاده میکنیم (SiteController). این کنترلر در پوشه controllers قرار دارد. پیدا کردید؟؟
خب بازش کنید و action رو بصورت زیر ایجاد کنید:
public function actionSay($message = 'Hello')
{
return $this->render('say', ['message' => $message]);
}
نکات:
1- هر action ای رو که تعریف میکنید در کنترلر اولش باید action قرار دهید مثه actionSay
2- پارامتر میتواند مقدار پیشفرض داشته باشد مانند $message
3- پارامتر اول تابع render اسم فایل view هستش که قرار است ایجاد کنیم بدون پسوند php البته.
4- پارامتر دوم تابع render مقادیری است که پاس میدهیم به فایل view تا به آنها دسترسی داشته باشیم. در اینجا ما به متغیر $message دسترسی داریم.
5- اول حرف say بزرگ نوشته می شود.
6- اگر چند کلمه قرار است نام متد شود. آنها را با – از هم جدا میکنیم در نام URL: مثلاً beestak-project این مسیر نگاشت میشود به متد actionBeestakProject یعنی – حذف میشود و اول کلمات بزرگ می شوند.
7- متد render خروجی کامل html پردازش شده را بر میگرداند و متد ما هم آن HTML را بر میگرداند به application و در نهایت داخل application تبدیل میشود به یک response و میرسد به دست کاربر.
ایجاد View
خب ما تو کنترلر say رو برای رندر کردن صدا کردیم. حالا میخواهیم اون say رو درست کنیم. ;-)
داخل این فایل تمام کاری که میخوایم انجام بدیم اینه که $message ارسال شده رو پرینت کنیم.
محتوای فایل say.php به قرار زیر است:
<?php
use yii\helpers\Html;
?>
<?= Html::encode($message) ?>
مسیر ذخیره هم بصورت views/site/say.php است. یعنی باید تو پوشه views در زیرپوشه site قرار بدیم.
نکته۱: علامت = باعث میشه که $message بیرون چاپ شود.
نکته۲: قبل چاپ کردن اطلاعات unsafe آنها رو encode میکنیم.
نکته۳: بسه دیگه چقد نکته میخونی برو سراغ ادامه مطلب!
خب حالا به لینک زیر تو لوکال هاستتون بروید تا خروجی رو ببینید:
کد HTML:
http://hostname/index.php?r=site/say&message=Hello+Beestak.com
اگر بخش message رو کلاً پاک کنید مقدار hello بیرون چاپ میشود چون در هنگام تعریف تابع مقدار اولیه hello را دادیم به متغیر ورودی $message
خب با کنترلر و view آشنا شدیم. فهمیدیم که چطور باید پارامتر رو از کنترلر به view پاس بدیم و اون رو بعد از encode چاپش کنیم. خیلی چیزای دیگه مگه نه؟