یکی از فریمورکهای PHP که در بین مردم بسیار محبوب هست فریمورک Yii2 یا به فارسی فریمورک یی میباشد. این نوع فریمورک بسیار قدرتمند، تمام آنچه که برنامه نویسان به آن نیاز دارند را در خودش جای داده است. به دلیل اهمیت بالای آن، تصمیم گرفتیم در این مقاله به آموزش Yii2 بپردازیم. بعد از نصب Yii2 Framework سراغ ویژگیهای مهم آن شامل استفاده از معماری MVC برای PHP در این نوع فریمورک میپردازیم و پس از تنظیم اپلیکیشن Yii، در گیت هاب یک ریپازیتوری ایجاد میکنیم.
در این آموزش نصب Yii 2.0 را یاد میگیریم، محیط توسعهی محلی خود را راهاندازی میکنیم، یک اپلیکیشن Hello World ساده میسازیم، محیطِ هاستینگ ریموت خود را تنظیم میکنیم و کدمان را در یک ریپازیتوری گیتهاب قرار میدهیم.
نصب و راه اندازی Yii2
اسناد
در این قسمت مراحل اولیهی نصب Yii2 PHP Framework را در سیستمعامل مک با هم یاد میگیریم. Yii 2.0 اسناد متعددی دارد که جزئیات مرتبط به آن را میتوانید در آنها پیدا کنید.
آموزش نصب Composer
Yii2 به یک کامپوزر نیاز دارد. کامپوزر یک مدیر Dependency معروف برای PHP است. اگر در سیستمتان کامپوزر ندارید، کد زیر را اجرا کنید:
curl -s http://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer
نصب فریم ورک Yii2
حالا از کامپوزر برای نصب Yii2 استفاده میکنیم. برای نصب باید اکانت گیتهاب خود را داشته باشید و اطلاعات آن را وارد کنید. اگر در گیتهاب حساب ندارید، از اینجا یک اکانت بسازید.
بیایید نام اولین پروژه را “hello” بگذاریم:
cd ~/Sites composer global require "fxp/composer-asset-plugin:1.0.0-beta2" composer create-project --prefer-dist yiisoft/yii2-app-basic hello
Yii2 براساس نوع اپلیکیشن، دو نوع تمپلت نصب در اختیارتان قرار میدهد. در این آموزش از اپلیکیشن Basic استفاده میکنیم که به صورت پیشفرض نصب شده است. تمپلت Advanced آن به شما امکان دسترسی به قسمتهای فرانتاند (Front-End)، بکاند (Back-End) و یک کنسول (Console) را میدهد تا بتوانید اپلیکیشنهای تحت وب پیشرفتهتر مثل یک بلاگ وردپرسی بسازید. داشبورد ادمین و بَک آن به صورت کرون جاب (Cron Job) است.
در این دوره تفاوتها و قابلیتهای Yii basic و Yii Advanced را آموخته و همچنین با نصب Yiiframework2 قالب Advanced آشنا میشوید:
آموزش نصب Yiiframework2 قالب Advanced
آموزش نصب تصویری MAMP
من از برنامهی رایگان و متنباز MAMP برای توسعهی LAMP استفاده میکنم. مطمئن شوید که MAMP به خوبی کار میکند و سرورهای وب و پایگاه دادهی آن فعالند. سپس یک Symlink به Sites پوشهی برنامه برای MAMP بسازید:
cd /Applications/MAMP/htdocs ln -s ~/Sites/hello/ /Applications/MAMP/htdocs/hello
سپس به آدرس http://localhost:8888/hello/web بروید. میبینید که اپلیکیشن Yii2 با تمپلت Basic، که دارای Bootstrap 3.x است، اجرا میشود.
این صفحه برای برنامهنویسان Yii 1.1 جالب خواهد بود، چون Yii قبلاً از Bootstrap پشتیبانی نمیکرد. Bootstrap یک فریمورک رسپانسیو CSS است که تقریباً در همهجای وب از آن استفاده میشود.
معماری اپلیکیشن Yii
یکی از مهمترین ویژگیهای فریمورک Yii داشتن معماری MVC) Model View Controller) برای PHP است. این ویژگی محیط برنامهنویسی را ساختاریافتهتر، کد برنامه را قابلفهمتر و انجام برخی وظایف مشکل PHP مثل امنیت و تولید کد خودکار را سادهتر میکند. همچنین این ویژگی قابلیت توسعه و استفادهی مجدد از کد را افزایش میدهد.
در یک اپلیکیشن Yii، تمام ترافیک برنامه را به یک فایل به نام /web/index.php منتقل میکنیم. این فایل Yii و تمام Dependencyهایش را لود و سپس برنامه را اجرا میکند.
run();
متد Index به صورت پیشفرض در فایل /controllers/SiteController.php به صورت زیر است:
public function actionIndex() { return $this->render('index'); }
اغلب، Controllerها متدهای بسیاری دارند، که مثل کد بالا تعداد خط کدهایش کم است. Controllerها سطح دسترسی را مدیریت میکنند، از Modelها استفاده میکنند و از Viewها رندر میگیرند. هوش برنامه باید در Modelهایتان قرار گیرد و Viewهای برنامه باید عملکردهای نسبتاً سادهای را در تمپلت ارائه کنند.
Yii به صورت پیشفرض از /views/layouts/main.php در Index View برنامه یعنی /views/site/index.php رندر میگیرد. main.php حاوی ساختار HTML و CSS صفحه است، مثل تولبار و محتوا. در فایل main.php میبینید که Content فراخوانی میشود:
= Breadcrumbs::widget([ 'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], ]) ?> = $content ?>
کد فایل /views/site/index.php به جای متغیر $content قرار میگیرد که در حال حاضر یک کد HTML ساده است که پیغام Congratulations! را در صفحهی بالا نمایش میدهد.
پیشنهاد دانشیار آی تی به شما
بهینهسازی آدرسهای Yii Framework 2 قالب Advanced برای موتورهای جستجو
خواندن مطلب
ساخت برنامهی Hello World!
فعال کردن Pretty URL
بیایید اول Pretty URLها را با mod_rewrite فعال کنیم. اگر در صفحهی اول Yii، روی گزینهی About در منو کلیک کنید، URL زیر را میبینید:
http://localhost:8888/hello/web/index.php?r=site%2Fabout
ما میخواهیم آن را به صورت زیر تغییر دهیم:
localhost:8888/hello/web/site/about
پوشهی config حاوی فایلهای کانفیگریشن اپلیکیشنهای کنسول و تحت وب و تنظیمات پایگاهداده است. /config/web.php را ویرایش و urlManagement را به اپلیکیشن کنونی تحت وب اضافه کنید. بخش urlManager را درون آرایهی Components اضافه کنید:
'components' => [ //... 'urlManager' => [ 'showScriptName' => false, 'enablePrettyUrl' => true ], //... 'request' => [
سپس یک فایل .htaccess را در /web و جایی که فایل index.php وجود دارد، بسازید:
RewriteEngine on # If a directory or a file exists, use it directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Otherwise forward it to index.php RewriteRule . index.php
مطمئن شوید که mod_rewrite به صورت محلی در MAMP اجرا میشود.
در مرورگرتان، آدرس http://localhost:8888/hello/web/site/about را باز کنید. باید وارد صفحهی About اپلیکیشن Yii شوید و گزینههای دیگر منو هم باید URLهایی به همین شکل داشته باشند.
برای یادگیری مفاهیم پایه و اساسی فریمورک Yii2 کلیک کنید:
چگونگی شروع سریع بر YiiFramework
ساخت Say Hello World! Action
حالا، یک Action به نام Say برای Controller میسازیم تا پیغام موردنظرمان را تکرار کند. کد زیر را در /controllers/SiteController.php اضافه کنید:
public function actionSay($target = 'World') { return $this->render('say', ['target' => $target]); }
این کد به دنبال پارامتر URLای به نام target میگردد تا در صفحه نمایش نشان دهد. اگر پارامتر target وجود نداشته باشد، “World” را تکرار میکند. Actionها در Yii با پیشوند action شروع میشوند و بعد از آن نام موردنظر برای Action قرار میگیرد. در کلاس SiteController، از public function actionSay استفاده میکنیم. Yii با استفاده از پیشوند action متدهای Action را از سایر متدها تشخیص میدهد.
متد رندر به صورت پیشفرض به دنبال فایلی در views/ControllerID/ViewName.php میگردد. پس در /views/site/، یک فایل ویو say.php بسازید:
Hello = Html::encode($target) ?>
Welcome to your Yii2 demonstration application.
این یک فایل ویو است که تگ h1 را، که حاوی Hello است، به همراه متغیر target تکرار میکند.
نکته: متغیر target را encode میکنیم تا از آرگومانهای پارامتر URL در مقابل کد بدخواه مراقبت کنیم.
اگر به آدرس http://localhost:8888/hello/web/site/say?target=Tuts%20Readers بروید، صفحهی زیر را خواهید دید:
این مثالی بسیار ساده از معماری MVC اپلیکیشنهای Yii2 بود.
حالا بیایید اپلیکیشن را در گیتهاب قرار دهیم و آن را در یک سرور محیط توزیع نهایی (Production Server) دپلوی (Deploy) کنیم.
پیشنهاد دانشیار آی تی به شما
آموزش لاراول Laravel گام به گام پروژه محور ۲۰۲۰
خواندن مطلب
تنظیم محیط هاستینگ ریموت
اپلیکیشن Basic به خوبی با Apache یا Nginx کار میکند که در اینجا دربارهی Apache صحبت خواهیم کرد.
ساخت یک ریپازیتوری در گیت هاب
بعد از تنظیم تمپلت اپلیکیشن Yii، یک ریپازیتوری در گیتهاب میسازیم:
نکته: میتوانید Yii2 .gitignore را از گیتهاب کپی و در فایل ~/Sites/hello/.gitignore کپی کنید. همچنین میتوانید سایت را به صورت ریموت با آن بسازید سپس به صورت محلی تلفیق کنید. هر دو رویکرد خوب است، اما رویکرد اول سادهتر است.
دورههای مرتبط در دانشیار آی تی
میتوانید از اپلیکیشن گیتهاب یا خط فرمان برای ساخت ریپازیتوری استفاده کنید. در کد زیر، با استفاده از این دستورات یک پروژهی موجود را از طریق خط فرمان به گیتهاب اضافه میکنیم (به جای “youraccount” نام اکانت گیتهابتان را بنویسید):
cd ~/Sites/hello git init git commit -m "first commit of hello world for yii2" git remote add origin [email protected]:youraccount/hello.git git push -u origin master
کانفیگ کردن یک سایت Apache روی سرور
سرور LAMP یا ابری خود را راهاندازی کنید. وقتی IP خود را به دست آورید، DNS را تغییر دهید تا یک نقطهی A به سرور ایجاد کنید:
yourdomain.com A 192.161.234.17
سپس با استفاده از IP یا دامین وارد سرور شوید:
ssh [email protected]
کانفیگریشن را آپدیت کنید، گیت را نصب کنید، mod_rewrite را برای Apache و mcrypt را برای PHP فعال کنید:
sudo apt-get update sudo apt-get upgrade sudo a2enmod rewrite php5enmod mcrypt
دسترسی گیت هاب را در سرور ریموت تنظیم کنید
حالا کاربری را برای Pull کردن کد از گیتهاب ایجاد میکنیم که توسط Apache پشتیبانی میشود. گیت را روی سرورتان نصب کنید:
sudo apt-get install git
حالا گروهی برای www ایجاد میکنیم، کاربران www-data و گیتهاب را به آن اضافه میکنیم و مالکیت پوشههای وبمان را به آن میدهیم.
adduser github addgroup www adduser github www adduser www-data www chown -R :www /var/www chmod +s -R /var/www chmod -vR g+w /var/www/
حالا برای سینک کردن کدها، کلیدی را برای کاربر ایجاد میکنیم و آن را با گیتهاب به اشتراک میگذاریم:
su github ssh-keygen -t rsa -C "[email protected]" exit cat /home/github/.ssh/id_rsa.pub
چیزی شبیه شکل زیر خواهید دید، که باید آن را کپی و در GitHub.com پیست کنید:
به صفحهی Setting ریپازیتوری گیتهاب بروید و این کلید را در قسمت Keys به ریپازیتوری خود اضافه کنید:
پس از اضافه کردن، میبینید که کلید به صورت زیر نمایش داده میشود:
در آخر هم میتوانید آن را به سرور محیط توزیع نهایی Clone کنید:
git clone [email protected]:youraccount/hello.git /var/www/hello
اگر دسترسی گیتهاب را به درستی تنظیم کرده باشید، باید به چیزی شبیه شکل زیر برسید:
پس از این میتوانید با توسعههای بیشتر کدتان، آنها را با استفاده از دستور Pull گیت در سرور ریموت سینک کنید. این کار از سینک کردن دستی کدها بسیار سادهتر است.
ساخت یک Apache Site Configuration
یک فایل کانفیگ Apache بسازید:
nano /etc/apache2/sites-available/hello.conf
کانفیگریشن زیر را با توجه به نام دامین خود تغییر دهید:
ServerName yourdomain.com # Set document root to be "basic/web" DocumentRoot "/var/www/hello/web" # use mod_rewrite for pretty URL support RewriteEngine on # If a directory or a file exists, use the request directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Otherwise forward the request to index.php RewriteRule . index.php
سایت خود را فعال کنید:
a2ensite hello.conf a2dissite 000-default.conf service apache2 reload
حالا به آدرس http://yourdomain.com/site/say?target=World! بروید و باید اپلیکیشنتان را ببینید که بدون یک تولبار دیباگ Yii2 در پایین صفحه و به صورت زیر اجرا میشود:
همراهان گرامی سایت دانشیار آی تی پس از مطالعه این آموزش، میتوانید به سراغ قابلیتهای پیچیدهتر Yii2 بروید. در صورتیکه پیشنهاد و یا انتقادی دارید در بخش دیدگاه در انتهای مقاله ثبت کنید.
دورههای مرتبط در دانشیار آی تی