Програмування з YII2: приступаємо до роботи

image
Від перекладача.
Життя така штука, як я починав цикл статей по Java Spring і спільнота повідомило, що вибір упав не на саму свіжу інформацію. Зараз життя закинула мене в хардкорное програмування на С++, а душа все одно потребує в інтернеті, тому у вільний час вирішив вивчити разом з вами технології, які може з'їсти будь-хостинг і в той же час складність розроблюваних додатків і ООП не сильно постраждає від PHP.
Вихідний текст статті на англійській ви знайдете за адресою http://code.tutsplus.com/tutorials/programming-with-yii2-getting-started--cms-22440
Переклад не претендує на дословности, але про грубі помилки, якщо такі є – прошу повідомляти в коментарях.

Якщо ви питаєте «що таке YII?», прочитайте більш ранній урок «Введення в фреймворк YII», який описує переваги YII, а також зачіпає питання нововведень другої версії фреймворку від 12 жовтня 2014.
Цей урок присвячений установці YII2, налаштування вашого оточення, написання класичного програми «Привіт, світ!», налаштування віддаленого оточення для хостингу і деплоя з GitHub.

Установка YII2

Документація
Ви можете знайти докладну інструкцію тут, я ж пробегусь за простою і типовою для Mac OS X встановлення і налаштування середовища. У фреймоврка є детальна документація і опис класів, яке містить всі деталі про YII.
Від перекладача. Я в свою чергу не маю під рукою яблучного девайса і буду виконувати всі дії під Ubuntu (запущеної під VMWare Player).

Установка Composer
Для комфортного використання фреймворку рекомендується використовувати популярний менеджер розширень PHP – Composer. Якщо він у вас ще не встановлений виконайте наступне:
curl -s http://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer


Установка YII2
Тепер використовуємо Composer для установки YII2. Для установки потрібен обліковий запис на GitHub, якщо у вас його немає – зареєструйтеся.
Давайте назвемо наш перший проект «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 підтримує два типи додатків для розробки: прості і просунуті. Для даного уроку ми будемо використовувати просте додаток, воно встановлюється за замовчуванням. Шаблон просунутого програми підтримує front-end, back-end і консоль, так само як WordPress, це адміністративна панель і завдання cron.

Установка і настройка локальної середовища розробки
Я використовую безкоштовне MAMP for OS X з відкритим вихідним кодом, для розробки. Переконайтеся, що MAMP запущений і його web-сервер та сервер бази даних запущені. Потім створити символічне посилання на директорію з сайтом:
cd /Applications/MAMP/htdocs
ln -s ~/Sites/hello/ /Applications/MAMP/htdocs/hello

Тепер, якщо ви налаштували все вірно, то відкривши localhost:8888/hello/web ви побачите простий шаблон програми YII2 Bootstrap 3.x.
image
Ця сторінка здивує розробників, раніше розробляють на YII 1.1, де не був встановлений Bootstrap останньої версії, який міцно зайняв своє місце в мережі.

YII архітектура програми
Одна з ключових особливостей фреймворку – підтримка патерну MVC. Це дозволяє створювати більш структурований код, який простіше розуміти, спрощує багато речей, які реалізуються з працею на PHP, такі як безпека і автоматична кодогенерация. Також це сприяє підтримці та повторного використання коду.
В YII додатку весь трафік прямує на один файл /web/index.php. Цей файл завантажує YII, залежності, а потім запускає наш додаток.
<?php

// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

$config = require(__DIR__ . '/../config/web.php');

(new yii\web\Application($config))->run();

За замовчуванням це Index метод у файлі /controllers/SiteController.php
public function actionIndex()
{
return $this- > render('index');
}

Як правило, в контролерах багато методів, але з мінімальною кількістю коду. Контролери керують доступом, завантажують моделі та подання. Основна смислове навантаження повинна лежати на моделях, а лише відображають уявлення шаблони.
За замовчуванням YII відображає /views/layouts/main.php в якості подання для /views/site/index.php. main.php підтримує html і css структуру сторінки з тулбаром і контентом. Всередині main.php відбувається виклик вмісту:
<div class="container">
<?= Breadcrumbs::widget([
'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
]) ?>
<?= $content ?>
</div>

Змінна $content буде замінена згенерованим кодом у /views/site/index.php, який представляє статичні html сторінки.

Пишемо додаток «Привіт світ!»

Включаємо красиві URL-адреси
На початку давайте включимо красиві адреси за допомогою mod_rewrite. Якщо на домашній сторінці ви клацнете по кнопці about то побачите адресу подібний цьому: localhost:8888/hello/web/index.php?r=site%2Fabout. Ми ж зараз наведемо його до такого виду localhost:8888/hello/web/site/about.
В директорії config зберігаються настройки всієї вашої середовища: налаштування веб-додатки, консольного додатка і настройки баз даних. Змінимо файл /config/web.php наступним чином:
'components' => [
//...
'urlManager' => [
'showScriptName' => false,
'enablePrettyUrl' => true
], 
//...
'request' => [

Потім необхідно створити в директорії /web, де зберігається наш index.php файл .htaccsess, з наступним вмістом:
RewriteEngine on

# If a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise it forward to index.php
RewriteRule . index.php

Переконайтеся, що в MAMP включений mod_rewrite, якщо ж виникли проблеми подивіться гілку на stackoverflow.
У вашому браузері перейдіть за адресою localhost:8888/hello/web/site/about, тепер там ви повинні побачити сторінку About простого додатка YII.

Створюємо екшн
Наступним кроком створимо дію для контролера, назвавши Say, для повтору нашого повідомлення. У файлі /controllers/SiteController.php додамо наступне:
public function actionSay($target = 'World')
{
return $this- > render('say', ['target' => $target]);
}

Ця функція буде шукати параметр target у адресі url для його виводу на екран. У разі його відсутності виведеться просто «World». У фреймворку YII дій реалізовані як методи з префіксом actionИмяЭкшена. У класссе SiteController ми використовували public function actionSay для створення екшену Say.
Стандартним поведінкою методу render є пошук файлу views/ControllerID/ViewName.php тому давайте створимо в /views/site/ файл say.php:
<?php
use yii\helpers\Html;
?>
<h1>Hello <?= Html::encode($target)?></h1>
<p>Welcome to your Yii2 demonstration application.</p>

Цей шаблон виведе рядок «Hello +$(target)», де $(target) — змінна передана в url. Для забезпечення безпеки вона потрапляє не на пряму в рядок, а на початку перевіряється на шкідливий код.
Якщо ви тепер відвідайте localhost:8888/hello/web/site/say?target=Tuts%20Readers, то побачите наступне:
image
Це простий приклад реалізації моделі MVC фреймворка. Більш детально ви можете ознайомитися з даним прикладом на сайті фреймворку в офіційній документації.
А тепер давайте заллємо наш додаток на GitHub і запустимо на продакшн-сервері.

Налаштування вашої віддаленої середовища

Просте додаток YII має запускатися на серверах Apache і Nginx «з коробки», я буду приводити інструкції по запуску на Apache, про Nginx ви зможете знайти на тут.

Створюємо репозиторій на GitHub
Як тільки я встановив базовий шаблон YII, я створюю репозиторій на GitHub:
image
Увага: Набагато простіше скопіювати і вставити YII .gitignore з GitHub (https://github.com/yiisoft/yii2/blob/master/.gitignore) в локальну папку ~/Sites/hello/.gitignore, ніж потім видаляти в ручну зайве. Хоча обидва варіанти допустимі.
Я використовую додаток GitHub Mac OS X(https://mac.github.com/), хоча ви також можете скористатися командним рядком для ініціалізації репозиторію. Наприклад так(замініть «youraccount» вашим ім'ям на GitHub:
cd ~/Sites/hello
git init
git commit -m "first commit of hello world for yii2"
git remote add origin git@github.com:youraccount/hello.git
git push -u origin master

Від перекладача. Я як репозиторію волію використовувати Bitbucket, так як він дозволяє мати приватні сховища безкоштовно.
Конфігуруємо Apache на сервері
Якщо у вас до сих пір не налаштований сервер, рекомендую подивитися на інструкцію по конфігурації сервера на Ubuntu (http://jeffreifman.com/digitalocean). Якщо у вас є IP адреса налаштуйте DNS вашого сервера:
yourdomain.com A 192.161.234.17

Тепер увійдіть віддалено по ssh на ваш сервер за допомогою IP або доменного імені
ssh root@yourserver.com

Оновіть якої кофігурації, встановіть Git, увімкніть mod_rewrite для Apache і mcrypt для PHP.
sudo apt-get update
sudo apt-get upgrade
sudo a2enmod rewrite
php5enmod mcrypt

Налаштування доступу віддаленого сервера до GitHub
Тепер ми налаштуємо pull запити з GitHub. Спочатку встановіть Git
sudo apt-get install git

Тепер ми створимо групу для www, додамо дані і GitHub користувачів і налаштуємо їх права:
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 "yourgithubaccount@youremail.com"
exit
cat /home/github/.ssh/id_rsa.pub

Ви побачите щось схоже на це, вам необхідно скопіювати і вставити ключ на GitHub
(якщо возникле проблеми подивіться тут (https://help.github.com/articles/error-permission-denied-publickey/)):
image
Зайдіть в розділ налаштувань репозиторію і додайте ключ:
image
Потім ви побачите щось подібне:
image
Нарешті ви зможете скопіювати гілку на ваш сервер:
git clone git@github.com:youraccount/hello.git /var/www/hello

Якщо все правильно сконфигурированно то ви побачите:
image
По мірі збільшення кількості коду ви через репозиторій зможете легко синхронізувати код локальної машини і продакшн-сервера. Це набагато простіше ніж синхронізувати архівом або вручну, ви переконаєтеся в цьому самі в процесі подальшого навчання.
Створення конфігурації сайту для Apache
Створимо конфігураційний файл:
nano /etc/apache2/sites-available/hello.conf

Змініть доменне ім'я на ваше:
<VirtualHost *:80>
ServerName yourdomain.com
# Set document root to be "basic/web"
DocumentRoot "/var/www/hello/web"
<Fs "/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
</Directory>
</VirtualHost>

Увімкніть ваш сайт:
a2ensite hello.conf
a2dissite 000-default.conf 
service apache2 reload

Переконайтеся, що ваш додаток працює пройшовши по посиланню yourdomain.com/site/say?target=World! (Налагоджувальний тулбар фреймворку внизу сторінки буде відключений!)
image
Вітаю! Тепер ми готові приступити до вивчення більш складних особливостей фреймворку!

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.