В данной статье мы установим Yii 2.0, настроим локальную среду для разработки и создадим первое простое приложение из встроенного шаблона basic.
Релиз Yii 2.0, новой версии замечательного фреймворка, состоялся 12 октября 2014 года.
Установка Yii 2.0
Подробную информацию по установке фреймворка можно найти в соответствующем разделе Документации по Yii 2.0. Там же можно найти и описание классов и расширений. Русская документация по Yii 2.0 пока еще не готова на 100%, но перевод ведется активными темпами и текущую версию доков можно оценить здесь.
Установка Composer’а
Yii2 поддерживает Composer, популярный менеджер зависимостей для php. Установим Composer:
curl -s http://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer
Устанавливаем Yii2
Используем свеженький Composer для установки фреймворка, новый проект назовем yii2-demo:
cd ~/Sites composer global require "fxp/composer-asset-plugin:1.0.0-beta2" composer create-project --prefer-dist yiisoft/yii2-app-basic hello
В Yii 2.0 включены два шаблона приложений: basic и advanced. На этот раз рассмотрим первый шаблон. Шаблон advanced содержит back-end и frond-end.
Теперь откроем адрес http://yii2.demo любым современным браузером и увидим, что наше приложение уже работает! Встроенные шаблоны basic и advanced используют Bootstrap 3.x по-умолчанию.
Структура приложения Yii
Одно из главных достоинств фреймворка — MVC (шаблон проектирования Модель-Вид-Контроллер). MVC — не только позволяет писать более простой и поддерживаемый код, но и уменьшить общий его объем за счет простоты повторного использования, а так же упрощает автоматизацию генерации и тестирования кода.
В Yii приложении все запросы, изначально, обрабатываются одним файлом: /web/index.php. Он загружает все необходимые настройки и файлы и запускает само приложение Yii.
// 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'); }
В общем, контроллеры — это обычные методы php, которые являются (чаще всего и идеологически) прослойкой между данными (Модель) и пользовательским интерфейсом (Вид). То есть контроллер управляет доступом и передает нужные данные Модели в нужный Вид. Основные манипуляции с данными должны осуществляться в Модели, а Виды должны отображать данные используя шаблоны.
Изначально Yii отображает шаблон /views/layouts/main.php через /views/site/index.php. Шаблон main.php содержит основную структуру и разметку страницы html и css. Внутри него можно увидеть код, выводящий динамическое содержимое:
<div class="container"> <?= Breadcrumbs::widget([ 'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], ]) ?> <?= $content ?> </div>
Переменная $content будет замещена кодом, сгенерированным /views/site/index.php, который просто выдает статичный код, приветствующий нас.
Классика жанра: Hello World! на Yii 2.0
Включаем красивые URL
Для начала включим в нашем новом приложении Yii2 человеко-понятные УРЛ (ЧПУ) с использованием mod_rewrite. Если сейчас щелкнуть по ссылке About на главной странице, мы увидим, что ссылка имеет вид вроде http://yii2.demo/index.php?r=site%2Fabout. Предлагаю сделать его более читаемым: http://yii2.demo/site/about.
Директория config содержит конфигурацию всего приложения в целом, а так же его веб и консольной частей. Займемся /config/web.php. Добавим компонент urlManagement к текущему приложению:
'components' => [ 'urlManager' => [ 'showScriptName' => false, 'enablePrettyUrl' => true, ], 'request' => [ //...
Теперь создадим файл .htaccess в каталоге /web, где расположен главный файл index.php:
[perl]RewriteEngine on
# Если файл или директория существуют, использовать их
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# В ином случае — переадресовать на index.php
RewriteRule . index.php[/perl]
Теперь, если на вашем веб-сервере включен mod_rewrite, при открытии в браузере страницы http://yii2.demo/site/about, Вы можете увидеть страницу About нашего Yii2 приложения. Другие пункты меню, так же отзываются приятными для нас ссылками с красивыми URL.
Создаем «вежливый» экшн
Теперь добавим приложению экшн, который будет здороваться с каждым, кто к нему обратится. Назовем его Privet и разместим в контроллере Site. Приступим, файл /controllers/SiteController.php:
public function actionPrivet($name = 'Друг') { return $this->render('privet', ['name' => $name]); }
Новый экшн будет искать параметр URL запроса name для использования его в приветствии, а если не найдет, использует «Друг». В Yii экшены описываются как методы с префиксом «action» и последующим за ним именем с большой буквы. Yii использует префикс action для различия обычных методов и экшенов. В нашем случае, мы создали метод public function acrtionPrivet для класса SiteController.
По-умолчанию файл для рендера ищется по следующему пути: views/ControllerID/ViewName.php. Так что создадим файл /views/site/privet.php:
<?php use yii\helpers\Html; ?> <h1>Привет <?= Html::encode($name) ?>!</h1> <p>Добро пожаловать в твое первое приложение Yii2.</p>
Этот шаблон просто выводит статичный html код, вставляя в него значение переменной $name, которую передал контроллер. Обязательно используем Html::encode() для отображения данных, полученных из запросов GET или POST, что бы исключить некоторые виды атак злоумышленников на наше приложение или его пользователей!
Откроем ссылку http://yii2.demo/site/privet?name=Начинающий%20осваивать%20Yii2. Что мы видим:
Это очень простой пример использования MVC в Yii2 приложении, здесь мы опустили первую часть — Модель.
Cупер!
Спасибо)
Очень помог разобраться!
Пишу код с помощью Yii давно….
Windows стал утомлять — решил поставить Ubuntu 14.04 LTS.
Установил локальный сервер.
Папку для разработки сайтов перевел в /home/мое_имя/www.
После установки Yii, обратил внимание, что при использовании ЧПУ сайт не работает, — нет доступа.
Папка ‘runtime’ блокируется от модификации владельцем Apache, вместо положенного для нее 777. А ведь эту папку надо регулярно чистить, да сам
фреймворк должен иметь к ней доступ.
Как победить? Изменить владельца сервера или, может быть, есть нормальное решение. К сожалению Ubuntu только осваиваю.
Владимир, если проблема в правах доступа к каталогам, должно помочь:
# устанавливаем владельца и группу каталога www и его содержимого
chown мое_имя:apache /home/мое_имя/www -R
# разрешаем запись и чтение для владельца и группы
chmod 660 /home/мое_имя/www -R
# разрешаем владельцу и группе чтение каталогов
chmod ug+X /home/мое_имя/www -R
NIX, за ответ спасибо!
Права на все папки фреймворк создает сам при установке. Изначально папки runtime и web/assets пустые с правами 777.
После первого запуска эти папки заполняются другими папками и файлами и используются фреймворком как chache.
Эти папки во время разработки постоянно приходится чистить, но доступ блокируется от имени www-data. Добавил www-data в свою группу.
Назначил рекурсивно права на эти папки как 777.
Теперь все нормально кроме папки runtime/debug.
Но это можно терпеть.
ЧПУ не работал по тревиальной причине — на файл
web/.haccess нужны права 755.
Настраивал Apache?
Попробуй включить mod_rewrite в Apache
Пример:
7rpk.com/lamp/apache/mod_rewrite/%D0%BA%D0%B0%D0%BA-%D0%B2%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C-mod_rewrite-%D0%B2-apache-%D0%BD%D0%B0-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5-ubuntu
За помощь и сочувствие всем спасибо! :))
С проблемой справился.
Может быть, кому-нибудь пригодится:
———————————————————
Для возможности чтения и записи файлов в папках runtime и web/assets необходимо пользователя добавить в группу Apache2 (www-data) и установить права на всю папку с сайтами (у меня /home/vladimir/www)
sudo adduser vladimir www-data
sudo chgrp -R www-data /home/vladimir/www
sudo chmod -R g+rw /home/vladimir/www
find /home/vladimir/www -type d -print0 | sudo xargs -0 chmod g+s
Перезапускаем комп.
Редактируем файл:
sudo gedit /etc/apache2/envvars
добавляем в конец файла строку:
umask 002
Перезапускаем Apache:
sudo service apache2 restart
————————————————————
Примечание:
Все нашел в Интернете.