Yii2: Начало

В данной статье мы установим 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 по-умолчанию.

yii2 demo install

Структура приложения 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. Что мы видим:

yii2-demo-002

Это очень простой пример использования MVC в Yii2 приложении, здесь мы опустили первую часть — Модель.

6 thoughts on “Yii2: Начало

  1. Владимир

    Пишу код с помощью Yii давно….
    Windows стал утомлять — решил поставить Ubuntu 14.04 LTS.
    Установил локальный сервер.
    Папку для разработки сайтов перевел в /home/мое_имя/www.
    После установки Yii, обратил внимание, что при использовании ЧПУ сайт не работает, — нет доступа.
    Папка ‘runtime’ блокируется от модификации владельцем Apache, вместо положенного для нее 777. А ведь эту папку надо регулярно чистить, да сам
    фреймворк должен иметь к ней доступ.
    Как победить? Изменить владельца сервера или, может быть, есть нормальное решение. К сожалению Ubuntu только осваиваю.

    1. nix Автор записи

      Владимир, если проблема в правах доступа к каталогам, должно помочь:
      # устанавливаем владельца и группу каталога www и его содержимого
      chown мое_имя:apache /home/мое_имя/www -R
      # разрешаем запись и чтение для владельца и группы
      chmod 660 /home/мое_имя/www -R
      # разрешаем владельцу и группе чтение каталогов
      chmod ug+X /home/мое_имя/www -R

      1. Владимир

        NIX, за ответ спасибо!
        Права на все папки фреймворк создает сам при установке. Изначально папки runtime и web/assets пустые с правами 777.
        После первого запуска эти папки заполняются другими папками и файлами и используются фреймворком как chache.
        Эти папки во время разработки постоянно приходится чистить, но доступ блокируется от имени www-data. Добавил www-data в свою группу.
        Назначил рекурсивно права на эти папки как 777.
        Теперь все нормально кроме папки runtime/debug.
        Но это можно терпеть.
        ЧПУ не работал по тревиальной причине — на файл
        web/.haccess нужны права 755.

    2. Евгений

      Настраивал 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

      1. Владимир

        За помощь и сочувствие всем спасибо! :))
        С проблемой справился.
        Может быть, кому-нибудь пригодится:
        ———————————————————
        Для возможности чтения и записи файлов в папках 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
        ————————————————————
        Примечание:
        Все нашел в Интернете.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *