Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Огромное начальство по Yiinitializr

Anna | 31.05.2014 | нет комментариев

Ребята из Yii Software готовят бомбу. Пока я лишь отслеживаю за новой версией фреймворка из-за угла, но теснее вижу совершенствования во всём — от применения новых вероятностей языка до комфортного создания собственных конструкций для больших планов.

Впрочем в реальное время дела обстоят таким образом, что поезд только встаёт на рельсы (не ищите аналогий, правда они здесь есть) и стабильную версию ещё придётся подождать, а новые планы необходимо делать теснее сегодня. Для радостной разработки не хватает вовсе немножко, а именно — комфортной конструкции приложения, развёртывания без лишних задач, ну и различных плюшек по желанию. На данный момент особенно славным решением является Yiinitializr.

Yiinitializr — библиотека, помогающая упростить и ускорить цикл разработки приложения на основе фреймворка Yii. Из коробки доступны 3 варианта структурных образцов:

  • Basic — сделан для планов маленьких масштабов;
  • Intermediate — подойдёт для большинства планов средней трудности;
  • Advanced — будет отличным выбором для больше трудных планов с необходимостью предоставления собственного API.

Отчего стоит ознакомиться с этой статьёй? Неимение доходчивой документации вводит ещё неискушённых разработчиков в ступор (проверено на себе), а куча разных сюрпризов (скажем, в виде багов) восхитительно дополняют это чувство. Я попытался разобрать процесс работы с Yiinitializr до винтиков, Дабы уберечь вас от большинства неприятностей на пути его освоения.

На этом, я думаю, описательных слов довольно. Если вы читаете эту статью, значит вы теснее, скорее каждого, знаете, что такое Yiinitializr, и хотите получить результаты на определенные вопросы по его применению. А если всё-таки ещё не знаете, то основную суть, я верю, вы уловили, так что не опасайтесь читать дальше.

Внимание! Так как Yiinitializr продолжает прогрессировать (хоть и весьма медлительно), всякий баг либо всякое поведение описанное в этой статье могут быть исправлены/изменены на момент прочтения. Не исключено даже возникновение нового больше идеального инструмента (скажем, встроенных вероятностей 2-й версии фреймворка).

 

Установка

 

Шаг 1. Загрузка Yiinitializr

Перво-наперво Yiinitializr нужно скачать. Сделать это дозволено двумя методами — с официального сайта, либо из репозитория на GitHub (BasicIntermediateAdvanced). Воспользовавшись первым методом, мы получаем вероятность добавить в пакет разные растяжения для Yii, но по какой-то причине сборка Intermediate-образца происходит на основе ветхой версии Yiinitializr, содержащей неверный инициализирующий скрипт (Внимание! Это касается только Intermediate-образца). Совместно с тем, исходники из основной ветки репозитория предлагают нам иной малоприятный сюрприз, а именно — лишняя связанность в конфигурационном файле Composer, из-за которой во время установки происходит оплошность. Но не стоит отчаиваться, совместно мы верно сумеем решить эти задачи.

Выходит, в зависимости от того, какой метод вы предпочли, открывайте соответствующий спойлер.

Я скачал архив с официального сайта

Теперь нам придётся забежать немножко вперёд. Но Дабы не терять нить повествования, мы лишь поправим инициализирующий скрипт, а все разъяснения оставим на потом.
Распаковываем архив и меняем содержимое 2-х файлов. Содержимое ./frontend/www/index.php на:

require('./../../common/lib/vendor/autoload.php');

Yiinitializr\Helpers\Initializer::create('./../', 'frontend', array(
	__DIR__ . '/../../common/config/main.php',
	__DIR__ . '/../../common/config/env.php',
	__DIR__ . '/../../common/config/local.php'
))->run();

Содержимое ./backend/www/index.php на:

require('./../../common/lib/vendor/autoload.php');

Yiinitializr\Helpers\Initializer::create('./../', 'backend', array(
	__DIR__ . '/../../common/config/main.php',
	__DIR__ . '/../../common/config/env.php',
	__DIR__ . '/../../common/config/local.php'
))->run();

 

Я воспользовался службами GitHub

С инициализирующим скриптом у нас всё в порядке, но нужно избавиться от лишней зависимости Composer. Для этого открываем файл ./composer.json и удаляем строчку.

"2amigos/yiistrap": "dev-master",

из блока require.

Сейчас, когда актуальная версия свежескачанного Intermediate-образца Yiinitializr у нас на компьютере, предлагаю исследовать его конструкцию (с двумя другими версиями дела обстоят аналогичным образом, так что сложностей с пониманием появиться не должно). Приложение поделено на 4 части (<part>):

  • backend и frontend — тут всё ясно без пояснений;
  • console — часть для консольных команд;
  • common — место для всеобщих компонентов всех остальных частей. Скажем, сюда мы можем положить модель, которая будет применяться в backend- и frontend-частях, либо SiteController с всеобщими правилами для каждого приложения.

На что следует обратить внимание:

  • Применение отдельной конфигурации для всякой из частей. Подробности на дальнейшем шаге.
  • Инициализирующий скрипт — точка входа в приложение. Для всякой из backend- и frontend-частей приложения он свой и находится в директории ./<part>/www/.
  • Сам Yiinitializr, а также все библиотеки, установленные через Composer лежат в директории./comon/lib/. Библиотеки со своими зависимостями появятся в поддиректории vendor позже заключения установки.
  • Миграции, позже создания, старательно складываются в директорию ./console/migrations/.

 

Шаг 2. Заблаговременная настройка

Дальнейшим шагом по нашему плану идёт заблаговременная настройка приложения. число конфигурационных файлов впечатляет:

./backend/config/backend.php
./backend/config/env/dev.php
./backend/config/env/prod.php

./comon/config/main.php
./comon/config/test.php
./comon/config/env/dev.php
./comon/config/end/prod.php

./console/config/console.php
./console/config/env/dev.php
./console/config/env/prod.php

./frontend/config/frontend.php
./frontend/config/env/dev.php
./frontend/config/env/prod.php

Давайте разбираться. Дозволено обратить внимание, что конфигурационная директория всякой из частей имеет типовую конструкцию:

./<part>/config/<part>.php
./<part>/config/env/<environment>.php

Сходственное распределение разрешает нам разграничить настройки приложения, во-первых, по частям (<part>), а, во-вторых, по окружению (<environment>).

Часть (<part>) — это структурная единица приложения, отвечающая за определенные задачи.
Окружение (<environment>) — это режим, в котором работает сайт. По-умолчанию: dev (режим разработки) и prod (рабочий режим).

Позже установки (либо обновления) создаётся файл ./<part>/config/env.php в тот, что копируются настройки из ./<part>/config/env/<environment>.php. Дальше, при всяком запуске нашего приложения, конфигурационные файлы будут динамически собираться вместе. Первоначально, для меня было загадкой, по какому тезису происходит сборка. Результат оказался абсолютно логичным:

Исключительная непременная настройка, которую необходимо произвести именно на этом шаге — настройка соединения с базой данных. Для этого задаём в файле ./comon/config/env/dev.php свои данные для подключения. Мы предпочли данный конфигурационный файл по причине того, что теперь трудимся в режиме разработки, а база данных у нас цельнаядля всех частей приложения.

Всё сделали? Отменно! Можем переходить к дальнейшему шагу.

Шаг 3. Установка с поддержкой Composer

Предлагаю перечислить добавочные вероятности Yii, без использования которых не удастся реализовать полновесное приложение:

  • Применение растяжений.
  • Тестирование с поддержкой PHPUnit и Selenium. Yii предоставляет нам добавочные классы для тестирования.
  • Метаморфоза конструкции базы данных путём создания миграций. В Yii эта вероятность реализована с поддержкой консольной команды, следственно к этому же пункту мы отнесём применение всяких других пользовательских консольных команд.

Раз Yiinitializr осуществляет связь с фреймворком через Composer, то давайте пойдём этой же драгоценный для реализации всех вышеперечисленных пунктов.

Внимание! Безусловно же, в своём плане вы можете пользоваться любым иным методом установки библиотек для разработки, таких как PhpUnit. Я предлагаю такой вариант в качестве одной из альтернатив, и если у вас есть свои поводы, Дабы предпочесть иной путь, то никто не воспрещает. Данный вариант не является исключительным верным.

Composer — администратор зависимостей для PHP. С его поддержкой мы можем легко настроить все нужные растяжения как в целом для плана, так и для определенного окружения.
Для начала давайте откроем файл ./composer.json. О его структуре вы можете прочитать по ссылке выше, нас же теперь волнует только раздел require:

"require":{
    "yiisoft/yii":"1.1.14",
    "2amigos/yiiwheels":"1.0.3"
},

Тут указаны следующие зависимости — последняя на момент написания статьи версия самого фреймворка Yii, а также два растяжения (второе является зависимостью первого и следственно очевидно не указывается) от авторов Yiinitializr: Yiistrap — Twitter Bootstrap для Yii, Yiiwheels — продвинутые компоненты для Yiistrap. В названyiiях теснее дозволено запутаться. Растяжения, указанные в этом блоке нам необходимы для работы приложения. Таким же образом вы можете добавлять растяжения, нужные именно для вашего плана, но пока нам довольно и этих. Сейчас перейдем к библиотекам, которые нам потребуются в процессе разработки. Этими библиотеками является PhpUnit с дополнениями.

Добавляем данный блок позже предыдущего:

"require-dev":{
    "phpunit/php-invoker": "1.1.0",
    "phpunit/dbunit": "1.3.0",
    "phpunit/phpunit-story": "dev-master",
    "phpunit/phpunit-selenium": "dev-master"
},

Тут есть один увлекательный момент. Для работы библиотеки php-invoker нужно PHP-растяжение ext-pcntl, которое [на данный момент] работает только под Unix платформами. Следственно пользователям Windows нужно сделать маленький хак, добавив в блок repositories следующие настройки для загрузки php-invoker не в виде пакета Composer, а в виде репозитория Git:

"repositories":[
    {
        "type":"composer",
        "url":"http://packages.phundament.com"
    },
    {
        "type":"package",
        "package":{
            "name":"phpunit/php-invoker",
             "version":"1.1.0",
             "source":{
                 "type":"git",
                 "url":"http://github.com/sebastianbergmann/php-invoker",
                 "reference":"master"
             },
             "autoload":{
                 "classmap": [
                     "PHP/"
                 ]
            }
        }
    }
],

 

Внимание! Для установки зависимостей PhpUnit в системе должна быть установлена и добавлена в %PATH% система контроля версий Git.

Наконец-то мы можем перейти непринужденно к установке каждого этого добродушна в план, а также настройке окружения. Для этого воспользуемся Composer. Если он не установлен в вашу систему, то не напасть, т. к. в виде phar-архива он распространяется совместно с Yiinitializr.

Переходим в рабочую директорию плана. Перед запуском Composer нужно обновить:

> php composer.phar self-update

Сейчас приступаем непринужденно к установке нашего плана:

> php composer.phar install

 

Внимание! Не забывайте, что PHP использует различные настройки для различных сред запуска. Если у вас выскакивают ошибки соединения с базой данных, загрузкой через SSL либо таймауты, то проверьте какую конфигурацию использует PHP.

На вопрос о начале установки отвечаем позитивно:

Start Installation? [y/n]: y 

Растяжения начали скачиваться, процесс пошёл. Дальше нас спросят об окружении в котором мы собираемся трудиться. Теперь мы находимся в режиме разработки, следственно пишем dev либо легко нажимаем Enter:

Please, enter your environment -ie. "dev | prod | stage":  [dev]: dev

Поздравляю, Installation completed!

Что же сделал Composer?

  1. В зависимости от выбранного окружения сотворил конфигурационные файлы env.php.
  2. Сотворил временные папки: runtime, assets.
  3. Установил зависимые растяжения.
  4. Заблокировал окружение.
  5. Сотворил автозагрузчик для механического подключения нужных файлов (эта тема относится к вероятностям Composer и теперь для нас серьезной роли не играет).
  6. В завершение выполнения установки Composer механически вызвал команду migrate, которая сотворила в вашей базе данных таблицу {{migration}} для хранения метаданных миграций. Именно следственно нам было нужно настроить соединение с базой данных на прошлом шаге.

Теперь самое время разобрать, что же обозначает выражение «заблокировал окружение» (4 пункт). При разработке с применением Yiinitializr и Composer, может понадобиться обновить зависимости. Дабы не доводилось всякий раз вручную указывать нынешнее окружение, разработчики решили заблокировать план с поддержкой файла env.lock (./common/lib/Yiinitializr/config/env.lock). Пока он находится на своём месте, никакие лишние вопросы при обновлении не побеспокоят вас.

Внимание! Не следует изменять настройки в файлах ./<part>/config/env.php, т. к. данный файл исключен из-под слежения Git и при дальнейшем обновлении плана, файл «перезапишется». Для метаморфозы настроек окружения используйте только предуготовленные для этого файлы конфигураций ./<part>/config/env/<environment>.php.

 

Некоторые вероятности Yiinitializr

В этом разделе давайте ещё раз совместно окинем взором Yiinitializr, остановившись больше детально на некоторых его вероятностях.

Yiinitializr — это библиотека, подключив к плану которую, мы можем больше эластично настраивать конструкцию приложения. В базовой версии, разработчики предоставляют нам 3 готовых образца, подходящих для большинства планов. Всякий из образцов основан на Initializr и соответственно включает в себя Twitter Bootstrap, Modernizr и JQuery. Из коробки сайт лишён любой динамики и представляет собой неподвижную Initializr-страничку.

Идём дальше. Разработчики Yiinitializr написали своё видение базовых классов, которые предлагают расширять нам в своих приложениях. Посмотрите на них /common/extensions/components/ и решите, необходимы ли вам эти вероятности, прочитав малое изложение.

EWebApplication — расширенный вариант стандартного CWebApplication. В комментариях к способам достаточно ясно расписаны задачи, которые эти способы решают. Как мы знаем, менять начальный код библиотек, для метаморфозы поведения является плохим тоном, впрочем я не нашёл больше грациозного метода для применения EWebApplication, помимо как заменить ~46 строчку в файле./common/lib/Yiinitializr/Helpers/Initializer.php с

$app = \Yii::createWebApplication($config); 

на

$app = \Yii::createApplication('EWebApplication', $config);

EActiveRecord — расширенный вариант стандартного CActiveRecord, добавляющий сеттеры и геттеры для комфортной работы с именами форм, таблиц и списков (нужно для EController), а также группу способов для логирования изменений данных модели.

EController — привносит правило DRY в наши классы контроллеров, перенося из них способы loadModel иperformAjaxValidation, а также добавляет ещё ряд приятностей. В всеобщем постигайте сами, что-нибудь да сгодится.

Внимание! Применение вышеперечисленных классов, к сожалению, убирает вероятность генерировать CRUD через Gii. Как решить эту задачу глядите в FAQ.

Мы теснее видели, что Yiinitializr собирает конфигурационный файл из нескольких частей. Как же этим дозволено воспользоваться? Скажем, дозволено включить debug-режим для разработки, и отключить его для рабочей копии плана. Огромнее нет необходимости следить за debug-константами, всё дозволено сделать с поддержкой конфигурационных файлов.

Для этого применяется раздел конфигурации params. Нам доступны следующие параметры:

  • yii.debug;
  • yii.traceLevel;
  • yii.handleErrors;
  • php.defaultCharset;
  • php.timezone.

При всяком запуске приложения, значения этих параметров будут механически приниматься в действие. Сейчас, я думаю, стало ясно, как решить нашу задачу с включение/выключением debug-режима. В файлe./common/config/env/dev.php мы его включаем:

'params' => array(
    'yii.handleErrors' => true,
    'yii.debug' => true,
    'yii.traceLevel' => 3,
)

А в файле ./common/config/env/prod.php выключаем:

'params' => array(
    'yii.handleErrors' => false,
    'yii.debug' => false,
    'yii.traceLevel' => 0,
)

 

Внимание! Эти настройки отменнее произвести до установки через Composer. Если же вы сделали это позже, то нужно удалить файлы ./common/config/env.php и./common/lib/Yiinitializr/config/env.lock, а после этого исполнить

> php composer.phar update

Также, следите, Дабы эти настройки не перекрывались в других конфигурационных файлах.

 

Развёртывание приложения

Наконец пришло время выкатить нашу разработку в производство. У вас могут быть свои решения для развёртывания PHP-планов, мы же разглядим данный процесс со стороны Yiinitializr.

Предполагается, что мы возьмём наш план из Git-репозитория, скажем, с поддержкой клонирования:

> cd projects
> git clone yiinitializr yiinitializr-prod
Cloning into 'yiinitializr-prod'...
done.

Вследствие файлу .gitignore в корне, мы получили чистую версию плана, без временных директорий, конфигураций окружения и библиотек. Сейчас, по знакомой схеме, легко запускаем установку через Composer с ключом --no-dev, и в качестве окружения выбираем теснее prod:

> php composer.phar install --no-dev

Собственно, вот и всё, сейчас спокойно дозволено отправлять план на сервер (если вы производили действия этого раздела на локальной машине).

Вопросы и результаты

 

Есть ли перспективы?

Перспективы у Yiinitializr бесспорно есть, впрочем снизившаяся фактически до нуля скорость разработки делает их достаточно туманными, исключительно рассматривая присутствие большинства вероятностей во 2-й версии фреймворка. Но на самом деле, теперь не хватает ещё вовсе немногих доработок, Дабы применение Yiinitializr приносило только наслаждение.

Отчего генератор кода Gii не создаёт CRUD?


Если вы решили применять сторонние классы EActiveRecord и EController, то вас поджидает малое разочарование — вы не сумеете воспользоваться генератором кода Gii для создания CRUD из-за отличий в структуре классов.
Задача решается легко — растяжением Gii, с поддержкой подключения собственного образца кода. Я подготовил для вас рабочий вариант.
Распаковываем архив в директорию ./common и добавляем её в качестве пути поиска генераторов в конфигурацию ./common/config/env/dev.php:

'gii' => array(
    ...
    'generatorPaths' => array('common.gii'),
),

Сейчас, щёлкнув на поле Code Template на странице Crud Generator, должен возникнуть выпадающий список, содержащий наш комплект образцов yiinitializr-simple.

Я изменил настройки в файле конфигурации окружения, но ничего не поменялось.

Как мы теснее говорили, не следует изменять настройки в файлах ./<part>/config/env.php, т. к. данный файл исключен из-под слежения Git и при дальнейшем обновлении плана, файл «перезапишется». Для метаморфозы настроек окружения используйте только предуготовленные для этого файлы конфигураций./<part>/config/env/<environment>.php. Эти настройки отменнее произвести до установки через Composer. Если же вы сделали это позже, то нужно удалить файлы ./common/config/env.php и./common/lib/Yiinitializr/config/env.lock, а после этого исполнить

> php composer.phar update

Также, следите, Дабы эти настройки не перекрывались в других конфигурационных файлах.

Как поместить сайт на основе Yiinitializr на виртуальном хостинге?

Поставить сайт на основе Yiinitializr на воображаемый хостинг не составит труда, невзирая на различные инициализирующие скрипты для различных частей приложения. Нам нужно всякую из директорий./<part>/www/ назначить в качестве DocumentRoot для доменов. Скажем, в ISP Manager это дозволено сделать, назначив корневую директорию вида /www/yiinitializr/frontend/www для создаваемого WWW домена.

Внимание! В зависимости от настроек хостинга, сайт может всё равно не трудиться, выдавая разные ошибки. Первым делом посмотрите в сторону файла ./<part>/www/.htaccess. Всеобъемлющие настройки могут сыграть гневную шутку, следственно при появлении задач, испробуйте удалить его, посмотрев на итог.

 

Отчего вылетает Access forbidden при заходе в backend?

Потому что в ./backend/ для чего-то лежит файл .htaccess с инструкцией deny from all. Не знаю, есть ли в этом какой-то священный толк, следственно легко удаляем его. Вуаля!

Как добавить свои консольные команды для механического исполнения через Composer?

Что такое консольные команды вы можете прочитать в официальном начальстве Yii. Разработчики Yiinitializr взяли класс ComposerCallback из плана Phundament для предоставления вероятности механическогоисполнения консольных команд при установке/обновлении через Composer. Давайте взглянем на конфигурацию ./common/lib/Yiinitializr/config/console.php:

'params' => array(
    'composer.callbacks' => array(
        'post-update' => array('yiic', 'migrate'),
        'post-install' => array('yiic', 'migrate'),
    )
),

Эти настройки исполняют команду `./yiic migrate` во время событий post-install и post-update.
Также мы имеем вероятность вешать консольные команды на события установки/

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB