Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)



Если вы задаетесь вопросом: "что такое Yii?" посмотрите мой прошлый туториал Введение в Yii фреймворк, который объясняет преймущества Yii и демонтсрирует новые возможности Yii 2.0 вышедшом в Октябре 12, 2014.
Данный туториал проведет вас через установку Yii 2.0, установку локального енвайромента разработчика, создание просто Хеллоу-Ворлд приложения, настройку вашего удаленного продакшен енвайромента для хостинга и деплоинг вашего кода из GitHub репозитория.
Установка Yii 2.0
Документация
Вы можете найти подробную инструкции об установке здесь; Я же помогу вам проти через основы установки енвайромента разработчика на Mac OS X. Yii 2.0 имеет свое Полное Руководство (PDF) и Референс Классов, которые объясняют каждую деталь Yii.
Установка Composer
Yii2 требует Composer, популярный менеджер зависимостей для PHP. Если у вас он не установлен, запустите следующие:
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 предоставляет два различных шаблона установки, в зависимости от приложения вы разрабатываете: "basic" и "advanced". Для данного туториала мы воспользуемся "basic" приложением, которое установлено по умолчанию. В расширенном шаблоне приложения предусмотрены точки доступа для фронтенда, бэкенда и консоли для более продвинутого веб-приложения, такого как блог WordPress, административная панель управления и задачи cron.
Настройка локальной среды разработки
Я использую бесплатный MAMP для OS X для разработки LAMP. Убедитесь, что MAMP запущен, а его серверы веб-сайтов и базы данных активны. Затем создайте символическую ссылку для MAMP в каталог приложений для Sites
:
cd /Applications/MAMP/htdocs ln -s ~/Sites/hello/ /Applications/MAMP/htdocs/hello
Затем посетите http://localhost:8888/hello/web. Вы должны увидеть шаблон основного приложения Yii2, работающий с Bootstrap 3.x.
Эта страница, скорее всего, понравится разработчикам Yii 1.1, у которых не была предварительно настроенная поддержка последней версии Bootstrap.
Архитектура приложений Yii
Одной из наиболее важных особенностей Yii Framework является то, что он предоставляет Model View Controller для PHP. Это не только обеспечивает более структурированную среду программирования и более понятный код, но и упрощает ряд вещей, которые трудно сделать в 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, который генерирует Congratulations! страница, показанная выше.
Создаем Hello World!
Включение красивых URL-адресов
Во-первых, давайте включим красивые URL Yii2 с помощью mod_rewrite
. На домашней странице Yii, если вы нажмете на кнопку About, URL-адрес будет похож на http://localhost:8888/hello/web/index.php?r=site%2Fabout. Мы хотели бы изменить это на http://localhost:8888/hello/web/site/about.
Подкаталог config
включает конфигурацию среды для ваших веб-приложений и консольных приложений, а также будущие настройки базы данных. Измените /config/web.php
, чтобы добавить urlManagement
к текущему веб-приложению. Добавьте следующий раздел urlManager
в массив компонентов:
'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; если нет, ознакомьтесь с этим руководством на Stack Overflow.
В своем браузере посетите этот URL: http://localhost:8888/hello/web/site/about. Вы должны увидеть страницу Yii About и щелкнуть по другим параметрам меню, чтобы увидеть красивые URL-адреса.
Пишем экшен Hello World!
Затем добавим действие контроллера под названием Say
, чтобы повторить целевое сообщение по нашему выбору. В /controllers/SiteController.php
добавьте следующее действие:
public function actionSay($target = 'World') { return $this->render('say', ['target' => $target]); }
Это будет искать параметр URL, называемый target для вывода на экран. Если нет целевого параметра, он будет повторять World. В Yii действия определяются как метод с префиксом "action", за которым следует имя действия. В этом классе SiteController
мы используем public action actionSay
. Yii использует префикс "action" для того, чтобы отличать методы действий от других методов.
Поведение метода рендеринга по умолчанию будет искать файл во 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>
Это файл просмотра шаблонов, чтобы повторить статический HTML-тег h1
с Hello, за которым следует переменная target. Примечание. Мы экранируем переменную target для защиты аргумента параметра URL-адреса от вредоносного кода.
Если вы откроете URL-адрес, http://localhost:8888/hello/web/site/say?еarget=Tuts%20Readers, вы должны увидеть это:



Это очень простой пример контроллера Yii2 Model View Controller. Вы можете прочитать более подробное описание демонстрации Hello World и Yii2 MVC здесь.
Теперь давайте настроим наше приложение на GitHub и развернем его на продакшен сервер.
Настройка среды удаленного хостинга
Базовое приложение Yii должно отлично работать с Apache или Nginx, я дам инструкции для Apache, а здесь вы можете найти инструкции для Nginx.
Создать репозиторий на GitHub
После того как я создал шаблон приложения Yii, я создаю репозиторий на Github:



Примечание. Сначала немного проще копировать и вставлять Yii2 .gitignore из GitHub в локальный файл ~/Sites/hello/.gitignore, а не создавать сайт с ним удаленно и объединять его локально
Я использую приложение Mac OS X GitHub, но вы также можете использовать командную строку для инициализации репозитория. Ниже я следую инструкциям по добавлению существующего проекта из GitHub с помощью командной строки (замените «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
Настройка сайта Apache на вашем сервере
Если у вас еще нет сервера LAMP или облака, следуйте моим общим инструкциям по установке Ubuntu для начала работы. После того, как у вас есть свой IP-адрес, измените свои DNS-записи, чтобы иметь точку записи A на вашем сервере.
yourdomain.com A 192.161.234.17
Затем войдите на свой сервер через 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 на удаленном сервере
Теперь мы настроим пользователя для получение кода из Github, который может обслуживаться Apache. Сначала установите git на свой сервер.
sudo apt-get install git
Затем мы создадим группу для www, добавим в нее www-data и пользователей 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/
Затем мы создаем ключ для пользователя, который мы совместно используем GitHub для синхронизации кода:
su github ssh-keygen -t rsa -C "yourgithubaccount@youremail.com" exit cat /home/github/.ssh/id_rsa.pub
Вы увидите что-то вроде этого, что вам нужно скопировать и вставить в GitHub.com:



Перейдите на страницу настроек вашего репозитория GitHub с ключами и добавьте этот ключ в свой репозиторий:



Как только вы добавите его, вы увидите его здесь:



Наконец, вы можете клонировать дерево на ваш производственный сервер:
git clone git@github.com:youraccount/hello.git /var/www/hello
Если вы правильно настроили GitHub, он должен выглядеть так (если нет, просмотрите это):



По мере расширения кодовой базы в этой серии уроков и пуша обновлений с вашего локального компьютера вы сможете синхронизировать их на удаленном сервере с помощью git pull. Это проще, чем вытащить tarball или синхронизирующий код вручную - и станет более полезным, поскольку эта серия руководств будет продолжена с более поздними модулями.
Создание конфигурации сайта Apache
Создайте файл конфигурации сайта 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" <Directory "/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
Откройте страницу http://yourdomain.com/site/say?target=World! и вы должны увидеть свое приложение, работающее в вашем домене, без панели инструментов отладки Yii2 внизу:



Поздравляем! Теперь мы готовы изучить более сложные функции в Yii2. Если вы хотите узнать, когда будет готов следующий учебник по Yii2, подпишитесь на @tutspluscode или @reifman в Twitter или просмотрите мою страницу автора. Моя страница автора будет включать все статьи из этой серии сразу же после их публикации.
Если у вас есть какие-либо вопросы или исправления в этом уроке, разместите их ниже в комментариях.
Ссылки по теме
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weekly