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



Если вы интересуетесь: «Что такое Yii?» ознакомьтесь с уроком Знакомство с Yii Framework, в котором рассматриваются преимущества Yii и который включает в себя обзор Yii 2.0.
В этой серии Программирование с Yii2 я направляю читателей в использование Yii2 Framework для PHP. Когда вы начнете использовать Yii для реальной разработки, вы можете начать свой следующий проект с помощью его расширенного шаблона для приложений. Помимо всего прочего, он предоставляет интегрированные функции управления пользователями, а также два приложения: один для фронтенда, ориентированный на клиента, а другой - административный.
В этом уроке я расскажу вам о расширенном шаблоне Yii2 и расскажу вам об основных его настройках и использовании. В уроке Интеграция регистрации пользователя мы рассматривали внедрение пользовательского управления поверх базового шаблона с расширением User Yii2, в этом руководстве будет создан новый репозиторий с расширенным шаблоном, а не продолжен пример на нашей базовой кодовой базе Yii.
Прежде чем мы начнем, пожалуйста, помните, что я стараюсь участвовать в обсуждениях ниже. Если у вас есть вопрос или предложение по теме, пожалуйста, напишите комментарий ниже или свяжитесь со мной в Twitter @reifman. Вы также можете отправить мне электронное письмо.
Если вы заметили, что в этой серии была задержка, это потому, что я недавно вернулся с операции на мозг. Благодарим вас за терпение и поддержку. Приятно регулярно писать, и я с нетерпением жду продолжения освещения Yii2.
Чем отличается расширенный шаблон
Наиболее полезной причиной перехода на расширенный шаблон является его реализация функций управления пользователями, таких как регистрация, вход в систему, выход из системы и сброс пароля.
В расширенном шаблоне также предусмотрено несколько деревьев доступа для большего веб-приложения. Он имеет внешнее и внешнее веб-приложение для конечных пользователей и внутреннее для администраторов. Но это также можно расширить - например, для модераторов или специального API, хотя есть и другие способы интеграции этих функций в одно приложение.
Вот диаграмма, показывающая основные различия между базовым Yii и расширенной установкой:



В моих последних учебниках о расширении User Yii2 я все больше впечатлен набором функций в качестве альтернативы расширенному шаблону. Однако он также может быть легко интегрирован в любую установку.
Перед началом крупного проекта стоит изучить расширенный шаблон. Я собираюсь помочь вам в этом.
Установка расширенного шаблона
Давайте начнем установку расширенного шаблона с Yii2. Мы можем следовать инструкциям из шаблона расширенного проекта на GitHub.
Обновление Composer
Во-первых, мы проверяем, что у Composer есть необходимые ему пакеты:
1 |
$ composer global require "fxp/composer-asset-plugin:~1.0.3" |
2 |
|
3 |
Changed current directory to /Users/Jeff/.composer |
4 |
./composer.json has been updated |
5 |
Loading composer repositories with package information |
6 |
Updating dependencies (including require-dev) |
7 |
Nothing to install or update
|
8 |
Generating autoload files |
Установка Yii с расширенным шаблоном
Затем мы можем установить Yii с расширенным шаблоном проекта. Мы будем называть наше учебное приложение yiiplus:
1 |
$ composer create-project --prefer-dist yiisoft/yii2-app-advanced yiiplus |
2 |
Installing yiisoft/yii2-app-advanced (2.0.6) |
3 |
- Installing yiisoft/yii2-app-advanced (2.0.6) |
4 |
Loading from cache |
5 |
|
6 |
Created project in yiiplus
|
7 |
Loading composer repositories with package information |
8 |
Installing dependencies (including require-dev) |
9 |
- Installing yiisoft/yii2-composer (2.0.3) |
10 |
Loading from cache |
11 |
|
12 |
- Installing ezyang/htmlpurifier (v4.6.0) |
13 |
Loading from cache |
14 |
|
15 |
- Installing cebe/markdown (1.1.0) |
16 |
Loading from cache |
17 |
|
18 |
- Installing bower-asset/jquery (2.1.4) |
19 |
Loading from cache |
20 |
|
21 |
- Installing bower-asset/jquery.inputmask (3.1.63) |
22 |
Loading from cache |
23 |
|
24 |
- Installing bower-asset/punycode (v1.3.2) |
25 |
Loading from cache |
26 |
|
27 |
- Installing bower-asset/yii2-pjax (v2.0.4) |
28 |
Loading from cache |
29 |
|
30 |
- Installing yiisoft/yii2 (2.0.6) |
31 |
Loading from cache |
32 |
|
33 |
- Installing swiftmailer/swiftmailer (v5.4.1) |
34 |
Loading from cache |
35 |
|
36 |
- Installing yiisoft/yii2-swiftmailer (2.0.4) |
37 |
Loading from cache |
38 |
|
39 |
- Installing yiisoft/yii2-codeception (2.0.4) |
40 |
Loading from cache |
41 |
|
42 |
- Installing bower-asset/bootstrap (v3.3.5) |
43 |
Loading from cache |
44 |
|
45 |
- Installing yiisoft/yii2-bootstrap (2.0.5) |
46 |
Loading from cache |
47 |
|
48 |
- Installing yiisoft/yii2-debug (2.0.5) |
49 |
Loading from cache |
50 |
|
51 |
- Installing bower-asset/typeahead.js (v0.10.5) |
52 |
Loading from cache |
53 |
|
54 |
- Installing phpspec/php-diff (v1.0.2) |
55 |
Loading from cache |
56 |
|
57 |
- Installing yiisoft/yii2-gii (2.0.4) |
58 |
Loading from cache |
59 |
|
60 |
- Installing fzaninotto/faker (v1.5.0) |
61 |
Loading from cache |
62 |
|
63 |
- Installing yiisoft/yii2-faker (2.0.3) |
64 |
Loading from cache |
65 |
|
66 |
Writing lock file |
67 |
Generating autoload files |
Инициализация нашего приложения Yii
Теперь давайте инициализируем наше приложение:
1 |
$ cd ~/Sites/yiiplus |
2 |
$ php init
|
3 |
Yii Application Initialization Tool v1.0 |
4 |
|
5 |
Which environment do you want the application to be initialized in? |
6 |
|
7 |
[0] Development
|
8 |
[1] Production
|
9 |
|
10 |
Your choice [0-1, or "q" to quit] 0 |
11 |
|
12 |
Initialize the application under 'Development' environment? [yes|no] yes |
13 |
|
14 |
Start initialization ...
|
15 |
|
16 |
generate backend/config/main-local.php |
17 |
generate backend/config/params-local.php |
18 |
generate backend/web/index-test.php |
19 |
generate backend/web/index.php |
20 |
generate common/config/main-local.php |
21 |
generate common/config/params-local.php |
22 |
generate console/config/main-local.php |
23 |
generate console/config/params-local.php |
24 |
generate frontend/config/main-local.php |
25 |
generate frontend/config/params-local.php |
26 |
generate frontend/web/index-test.php |
27 |
generate frontend/web/index.php |
28 |
generate yii |
29 |
generate cookie validation key in backend/config/main-local.php
|
30 |
generate cookie validation key in frontend/config/main-local.php
|
31 |
chmod 0777 backend/runtime
|
32 |
chmod 0777 backend/web/assets
|
33 |
chmod 0777 frontend/runtime
|
34 |
chmod 0777 frontend/web/assets
|
35 |
chmod 0755 yii
|
36 |
chmod 0755 tests/codeception/bin/yii
|
37 |
|
38 |
... initialization completed. |
Подготовьте базу данных
Затем я буду использовать установленную версию MAMP для PHPMyAdmin для создания базы данных:



Нажмите Create. Взяв скриншоты для учебника, я забыл нажать кнопку Create, а затем удивлялся, почему мне не удалось выполнить миграцию моей базы данных - она еще не существовала.
Затем отредактируйте файл /common/config/main-local.php, чтобы включить настройки своей базы данных:
1 |
<?php |
2 |
return [ |
3 |
'components' => [ |
4 |
'db' => [ |
5 |
'class' => 'yii\db\Connection', |
6 |
'dsn' => 'mysql:host=localhost;dbname=yiiplus', |
7 |
'username' => 'root', |
8 |
'password' => '-localmysqldevpwd-', |
9 |
'charset' => 'utf8', |
10 |
],
|
11 |
'mailer' => [ |
Затем вы готовы запустить миграцию базы данных для инициализации своего приложения. Это прежде всего настраивает таблицу для управления пользователями:
1 |
$ ./yii migrate
|
2 |
|
3 |
Yii Migration Tool (based on Yii v2.0.6) |
4 |
|
5 |
Creating migration history table "migration"...Done. |
6 |
Total 1 new migration to be applied: |
7 |
m130524_201442_init |
8 |
|
9 |
Apply the above migration? (yes|no) [no]:yes |
10 |
*** applying m130524_201442_init
|
11 |
> create table {{%user}} ... done (time: 0.007s) |
12 |
*** applied m130524_201442_init (time: 0.022s) |
13 |
|
14 |
|
15 |
Migrated up successfully. |
Настройка Apache для Front-End и Back-End сайтов
Когда мы настраиваем наше окружение разработки или production с помощью расширенного шаблона, нам нужно указать веб-сервер на другой корневой путь, два на самом деле.
Сначала мы отредактируем наш файл hosts, чтобы включить frontend.dev и backend.dev:
1 |
$ more /etc/hosts
|
2 |
|
3 |
127.0.0.1 localhost |
4 |
127.0.0.1 frontend.dev |
5 |
127.0.0.1 backend.dev |
В моем рабочем окружении с помощью MAMP я привяжу свой каталог yiiplus к httdocs MAMP:
1 |
$ cd /Applications/MAMP/htdocs/ |
2 |
$ ln -s ~/Sites/yiiplus /Applications/MAMP/htdocs/yiiplus |
Затем я активирую (раскомментирую) включение для виртуальных хостов:
1 |
$ nano /Applications/MAMP/conf/apache/httpd.conf |
2 |
|
3 |
# Virtual Hosts |
4 |
Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf |
И настрою пути для каждого из моих серверов:
1 |
$ nano /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf |
2 |
|
3 |
NameVirtualHost *:8888 |
4 |
|
5 |
<VirtualHost *:8888> |
6 |
ServerName frontend.dev |
7 |
DocumentRoot /Applications/MAMP/htdocs/yiiplus/frontend/web/ |
8 |
|
9 |
<Directory "/Applications/MAMP/htdocs/yiiplus/frontend/web/"> |
10 |
# use mod_rewrite for pretty URL support |
11 |
RewriteEngine on |
12 |
# If a directory or a file exists, use the request directly |
13 |
RewriteCond %{REQUEST_FILENAME} !-f |
14 |
RewriteCond %{REQUEST_FILENAME} !-d |
15 |
# Otherwise forward the request to index.php |
16 |
RewriteRule . index.php |
17 |
|
18 |
# use index.php as index file |
19 |
DirectoryIndex index.php |
20 |
|
21 |
# ...other settings... |
22 |
</Directory> |
23 |
</VirtualHost> |
24 |
|
25 |
<VirtualHost *:8888> |
26 |
ServerName backend.dev |
27 |
DocumentRoot /Applications/MAMP/htdocs/yiiplus/backend/web/ |
28 |
|
29 |
<Directory "/Applications/MAMP/htdocs/yiiplus/backend/web/"> |
30 |
# use mod_rewrite for pretty URL support |
31 |
RewriteEngine on |
32 |
# If a directory or a file exists, use the request directly |
33 |
RewriteCond %{REQUEST_FILENAME} !-f |
34 |
RewriteCond %{REQUEST_FILENAME} !-d |
35 |
# Otherwise forward the request to index.php |
36 |
RewriteRule . index.php |
37 |
|
38 |
# use index.php as index file |
39 |
DirectoryIndex index.php |
40 |
|
41 |
# ...other settings... |
42 |
</Directory> |
43 |
</VirtualHost> |
Как только это будет завершено, вот что будет выглядеть на веб-сайте frontfront: http://frontend.dev:8888:



На бэкенд сайте будет запрашиваться вход в систему для администраторов:



Изучаем управление пользователями
Теперь я расскажу вам об основных элементах управления пользователями расширенного шаблона. Но сначала нам нужно обеспечить, чтобы мы получали электронные письма от Yii в нашей среде разработки.
Настройка доставки электронной почты
Управление пользователями отправляет электронные письма для сброса пароля, поэтому нам необходимо активировать конфигурацию SMTP SwiftMailer Yii. Я собираюсь использовать Mailtrap.io, который я рассмотрел в своем предыдущем учебнике, Введение в Mailtrap: поддельный SMTP-сервер для предварительного тестирования электронной почты вашего приложения.
Mailtrap предоставляет поддельный SMTP-сервер для вашей команды разработчиков, чтобы тестировать, просматривать и распространять электронные письма, отправленные из рабочего окружения, и проверять реальные данные без риска спама реальных клиентов. Для многих задач разработки использование Mailtrap будет бесплатным.
По сути, вы подписываетесь на Mailtrap и отправляете всю свою электронную почту через ваш поддельный SMTP-сервер Mailtrap. Ниже приведен краткий обзор видеоролика Mailtrap от Railsware:
Если вы выполните руководство и создадите учетную запись Mailtrap, вы увидите свой почтовый ящик:



И когда вы нажмете на значок «Настройки» в списке «Входящие», вы увидите, что каждый почтовый ящик Mailtrap имеет свои собственные учетные данные SMTP-сервера:



С Yii я обновляю настройки SMTP SwiftMailer в /common/config/main-local.php. Вот как это выглядит:
1 |
'mailer' => [ |
2 |
'class' => 'yii\swiftmailer\Mailer', |
3 |
'viewPath' => '@common/mail', |
4 |
'useFileTransport' => false, |
5 |
'transport' => [ |
6 |
'class' => 'Swift_SmtpTransport', |
7 |
'host' => 'mailtrap.io', |
8 |
'username' => '29xxxxxxxxxxx72', |
9 |
'password' => '2c3xxxxxxxxxxf5', |
10 |
'port' => '2525', |
11 |
'encryption' => 'tls', |
12 |
],
|
13 |
],
|
Обратите внимание: если вы не настроите viewPath
, как показано выше, вы можете столкнуться с ошибкой в файлах шаблонов электронной почты, которые будут не найдены.
Вход и регистрация
Вот как выглядит экран регистрации на фронтенде:



Это перенаправит вас на домашнюю страницу:



Вход в систему
Вот экран входа:



Забыли пароль
И вот экран Забыли пароль:



Если вы попросите новый пароль, вы найдете его в Mailtrap:



Что дальше?
Возможно вам будет интересна серия статей Пишем свой стартап на PHP, в которой используется расширенный шаблон Yii2. Кроме того, если вы заинтересованы в интеграции этого руководства с Yii2 User, ознакомьтесь с руководством по интеграции Yii2 User с расширенным шаблоном и аутентификацией Google (в ближайшее время).
Надеюсь, вам понравилось узнать о расширенном шаблоне приложений Yii2. Мне было бы интересно услышать ваши отзывы в комментариях о том, предпочитаете ли вы его базовому шаблону.
Следите за предстоящими учебниками из этой серии про фреймворк Yii2. Я приветствую пожелания по темам и замечания. Вы можете опубликовать их в комментариях ниже или отправить мне по электронной почте на моем веб-сайте Lookahead Consulting.
Если вы хотите узнать, когда выйдет следующий учебник Yii2, подпишитесь на меня @reifman в Twitter или проверьте мою страницу инструктора. Моя страница инструктора будет включать все статьи из этой серии, как только они будут опубликованы.