Yii Framework представляет собой один из лучших PHP-фреймворков, предназначенных для разработки больших веб-приложений. В цикле «Yii Framework для чайников» мы научимся разворачивать yii-приложение на сервере, узнаем как работать с фреймворком и познакомимся с основными возможностями, которые он предоставляет. Все это я постараюсь рассказать максимально просто и наглядно.

Развертка Yii-приложения


Для того, чтобы использовать Yii Framework необходимы:

  1. Веб-сервер с предустановленным PHP версии 5.1 и выше.
  2. Базовые знания PHP, объектно-ориентированного программирования и паттерна MVC.
  3. Архив с самим фреймворком. Можно скачать с официального сайта.

Скачанный архив содержит следующие элементы:

  1. Текстовые файлы CHANGELOG, LICENSE, README, и UPGRADE, содержание которых очевидно из названий.
  2. Папку demos, содержащую четыре демо-проекта (блог, телефонную книгу, игру «Виселица» и простой «Hello, world!»).
  3. Папку framework с самим фреймворком.
  4. Папку requirements с тестами совместимости фреймворка и хостинга.

Будем считать, что мы работаем в операционной системе семейства UNIX и путь до нашего сайта:
/srv/www/site.com/

Чтобы файлы фреймворка не были доступны из браузера, поместим папку framework в каталог
/srv/www/

Для того, чтобы развернуть yii-приложение воспользуемся командной строкой. Из корня выполним следующие команды в терминале:
cd /srv/www/site.com/framework/
php -f yiic webapp /srv/www/site.com

При этом в папке сайта будет развернуто демонстрационное yii-приложение и выставлены требуемые права на папки и файлы.

Структура Yii-приложения


Рассмотрим папки, находящиеся в каталоге /srv/www/site.com/

  1. assests — файлы, которые генерирует фреймворк в процессе работы.
  2. css — стили.
  3. images — изображения.
  4. protected — основная папка приложения. Ее рассмотрим подробнее.
  5. themes — тема фреймворка

Рассмотрим папки в каталоге /srv/www/yoursite.com/protected/

  1. commands — приложения для управления фреймворком через консоль.
  2. components — различные компоненты.
  3. config — конфигурационные файлы.
  4. controllers — контроллеры (MVC).
  5. data — SQLite база данных.
  6. etensions — расширения для фреймворка.
  7. messages — мультиязычность.
  8. migrations — миграции.
  9. models — модели (MVC).
  10. runtime — временные файлы, создаваемые фреймворком.
  11. tests — тесты.
  12. views — представления (MVC).

Настройка Yii-приложения


Любые взаимодействия с пользователем в yii-приложении происходят через bootstrap-файл index.php

$yii=dirname(__FILE__).'/../../framework/yii.php'; //Определяем расположение фреймворка
$config=dirname(__FILE__).'/protected/config/main.php'; //Определяем местоположение файла конфигурации
defined('YII_DEBUG') or define('YII_DEBUG',true); //Режим отладки
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3); //Определение количества уровней в стеке вызовов, которые будут отображаться в логах. Стек вызовов - это история подключения файлов и функций
require_once($yii);
Yii::createWebApplication($config)->run(); //Запускаем приложение

Большинство настроек находятся в файле /config/main.php. Файл конфигурации возвращает многомерный ассоциативный массив настроек, некоторые из которых по умолчанию предопределены.

return array (
'name'=>'Мой первый сайт на Yii Framework!', // Название приложения
'defaultController' => 'site', // Контроллер, загружаемый по умолчанию

'modules'=>array(
    'gii'=>array( // Модуль генерации кода, который можно использовать
        'class'=>'system.gii.GiiModule',
        'password'=>'YourPassword',
        'ipFilters'=>array(),
    ),
),
 
'components'=>array(
    'urlManager'=>array( // Компонент, изменяющий URL-адреса
        'urlFormat'=>'path',
        'rules'=>array(
            '<controller:w+>/<id:d+>'=>'<controller>/view',
            '<controller:w+>/<action:w+>/<id:d+>'=>'<controller>/<action>',
            '<controller:w+>/<action:w+>'=>'<controller>/<action>',
        ),
    ),
    'db'=>array( // Параметры доступа к MySQL базе данных
        'connectionString' => 'mysql:host=localhost;dbname=mydatabase',
        'emulatePrepare' => true,
        'username' => 'root',
        'password' => 'mypassword',
        'charset' => 'utf8',
    ),
),

'params'=>array( // Параметры. Можно вызывать как Yii::app()->params['Имя параметра']
    'adminEmail'=>'my@email.com',
),
);

Создание БД для будущего приложения


В качестве примера мы будем работать с базой данных, содержащей некоторое подобие хабра-комментариев и хабра-пользователей. Наглядно ее можно представить следующим образом:



SQL-запросы для создания соответствующих таблиц:
CREATE TABLE Users (
    id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(20) NOT NULL,
    email VARCHAR(60) NOT NULL,
    karma SMALLINT NULL,
    raiting SMALLINT NULL,
    registerDate DATETIME NULL
)

CREATE TABLE Comments (
    id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user MEDINT UNSIGNED NOT NULL,
    raiting SMALLINT NULL,
    date DATETIME NULL
)

Заключение


В следующей статье мы создадим модель, представление и контроллер для работы с базой данных.

Комментарии (10)


  1. sainomori
    01.09.2021 15:07
    +1

    В 2021 году в YII так и не появился DBAL который сам бы отвечал за актуальность схемы?


    1. Singrana
      01.09.2021 15:55
      +1

      В нем нормально реализованы миграции. Только в статье непонятно почему про них забыли. Да и 5 версия, скачивания, отсутствие composer — зачем это? Кто использует — тот знает, кто «вливается» — то почему без нормального подхода, если автор не в теме — то зачем пишет?


  1. sainomori
    01.09.2021 15:27
    +2

    И я прошу прощения, но зачем сложности со скачиванием архива, если композер готов позаботиться за вас обо всём?


  1. deanar
    01.09.2021 15:36
    +1

    Как я понял, статья про первую версию фреймворка. Мягко говоря, это уже не актуально, учитывая что активно ведется разработка 3-ей версии.


    1. Alexufo
      02.09.2021 01:10

      Последние 4 года активно ведется


  1. dim2r
    01.09.2021 16:14

    Интересно, есть ли решение такой проблемы -- надо чтобы продюсер выдал несколько задач потребителям и проконтролировал их завершение или узнал бы, что какая-то задача отвалилась внезапно и больше не работает.


    1. Akdmeh
      01.09.2021 20:48
      +1

      С помощью https://github.com/yiisoft/yii2-queue + внешний менеджер задач типа supervisorctl или systemctl это можно сделать. Там несколько движков для исполнения. В движке redis есть возможность повторить задачу через timeout, если она исполнится с ошибкой, можно указать количество попыток и время между попытками. В общем-то, неплохая функция, я ее активно использую. Но сразу скажу, что сейчас стоит ждать Yii3, так как Yii2 уже довольно "старенький" и близится к концу своей активной фазы развития.


      1. dim2r
        02.09.2021 00:38

        Я последний раз делал фоновое выполнение через

        file_put_contents( $path, "<?php code(); ?>");

        shell_exec("echo /usr/bin/php $path | at now");


  1. MikUrrey
    01.09.2021 23:38

    Можно скачать с официального сайта.

    Тактично намекну, что сейчас 2021 год.

    Могу сказать, что новичков на Yii будут интересовать вопросы, которые не раскрыты в статье. Например: как организовать структуры проекта; как следует сконфигурировать приложение для типичного веб-сайта, чтобы ваш первый проект работал по всем правилам; показать всю мощь переиспользования и кастомизации - она даже на простых проектах видна. А статей, подобных этой, существует уже очень много.

    И да, не стоит сейчас сажать новичков на Yii2. Он стремительно становится легаси.


  1. mrBarabas
    02.09.2021 00:03
    +1

    Я не настоящий «сварщик», но все же очень положительно отношусь к Yii, это первый фреймворк с которым приходилось работать и на котором мы сделали первый проект нашей компании. И даже я понимаю, что статья была бы хорошей году лет 10 назад, во времена до пхп 5.2. С тех пор много чего поменялось - про это выше уже многие писали, это и композитор и миграции, кроме того, в самом Yii есть замечательная утилита gii, которая сильно ускоряет начальный этап разработки. Ценность статьи в текущих реалиях - ноль. В документации лучше написано, если честно.