Статьи

Как программировать с Yii2: использование расширенного шаблона приложения

Конечный продукт
Что вы будете создавать

Если вы спрашиваете: «Что такое Yii?» Ознакомьтесь с разделом Введение в Yii Framework , в котором рассматриваются преимущества Yii и представлен обзор Yii 2.0.

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

В этом руководстве я познакомлю вас с расширенным шаблоном Yii2 и проведу вас через основные настройки и использование. При программировании с использованием Yii2: интеграция регистрации пользователей, в которой реализовано управление пользователями поверх базового шаблона с расширением Yii2 User, в этом руководстве будет запущен новый репозиторий с расширенным шаблоном, а не продолжены примеры на нашей базовой базе кодов Yii hello.

Прежде чем мы начнем, пожалуйста, помните, я стараюсь участвовать в обсуждениях ниже. Если у вас есть вопрос или предложение по теме, пожалуйста, оставьте комментарий ниже или свяжитесь со мной в Twitter @reifman . Вы также можете написать мне напрямую.

Если вы заметили, что в этой серии произошла задержка, это потому, что я недавно вернулся из операции на мозге . Спасибо за ваше терпение и поддержку — приятно регулярно писать снова, и я с нетерпением жду продолжения освещения Yii2.

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

Расширенный шаблон также предусматривает несколько деревьев доступа для более крупного веб-приложения. Он имеет интерфейсное и внутреннее веб-приложение для конечных пользователей и администраторов. Но это также может быть расширено, например, для модераторов или специального API, хотя есть и другие способы интеграции этих функций в одном приложении.

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

Yii2 Расширенное сравнение шаблонов с базовым шаблоном

В моих последних уроках о расширении Yii2 User я все больше поражаюсь его набором функций в качестве альтернативы расширенному шаблону. Тем не менее, он также может быть легко интегрирован в любую установку.

Перед началом крупного проекта стоит изучить расширенный шаблон. Я собираюсь помочь вам сделать это.

Давайте начнем установку расширенного шаблона с Yii2. Мы можем следовать инструкциям в расширенном шаблоне проекта на GitHub .

Во-первых, мы убедимся, что у composer есть нужные ему пакеты:

1
2
3
4
5
6
7
8
$ composer global require «fxp/composer-asset-plugin:~1.0.3»
 
Changed current directory to /Users/Jeff/.composer
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating autoload files

Затем мы можем установить Yii с расширенным шаблоном проекта. Мы назовем наше учебное приложение yiiplus :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
$ composer create-project —prefer-dist yiisoft/yii2-app-advanced yiiplus
Installing yiisoft/yii2-app-advanced (2.0.6)
  — Installing yiisoft/yii2-app-advanced (2.0.6)
    Loading from cache
 
Created project in yiiplus
Loading composer repositories with package information
Installing dependencies (including require-dev)
  — Installing yiisoft/yii2-composer (2.0.3)
    Loading from cache
 
  — Installing ezyang/htmlpurifier (v4.6.0)
    Loading from cache
 
  — Installing cebe/markdown (1.1.0)
    Loading from cache
 
  — Installing bower-asset/jquery (2.1.4)
    Loading from cache
 
  — Installing bower-asset/jquery.inputmask (3.1.63)
    Loading from cache
 
  — Installing bower-asset/punycode (v1.3.2)
    Loading from cache
 
  — Installing bower-asset/yii2-pjax (v2.0.4)
    Loading from cache
 
  — Installing yiisoft/yii2 (2.0.6)
    Loading from cache
 
  — Installing swiftmailer/swiftmailer (v5.4.1)
    Loading from cache
 
  — Installing yiisoft/yii2-swiftmailer (2.0.4)
    Loading from cache
 
  — Installing yiisoft/yii2-codeception (2.0.4)
    Loading from cache
 
  — Installing bower-asset/bootstrap (v3.3.5)
    Loading from cache
 
  — Installing yiisoft/yii2-bootstrap (2.0.5)
    Loading from cache
 
  — Installing yiisoft/yii2-debug (2.0.5)
    Loading from cache
 
  — Installing bower-asset/typeahead.js (v0.10.5)
    Loading from cache
 
  — Installing phpspec/php-diff (v1.0.2)
    Loading from cache
 
  — Installing yiisoft/yii2-gii (2.0.4)
    Loading from cache
 
  — Installing fzaninotto/faker (v1.5.0)
    Loading from cache
 
  — Installing yiisoft/yii2-faker (2.0.3)
    Loading from cache
 
Writing lock file
Generating autoload files

Теперь давайте инициализируем наше приложение:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$ cd ~/Sites/yiiplus
$ php init
Yii Application Initialization Tool v1.0
 
Which environment do you want the application to be initialized in?
 
  [0] Development
  [1] Production
 
  Your choice [0-1, or «q» to quit] 0
 
  Initialize the application under ‘Development’ environment?
 
  Start initialization …
 
   generate backend/config/main-local.php
   generate backend/config/params-local.php
   generate backend/web/index-test.php
   generate backend/web/index.php
   generate common/config/main-local.php
   generate common/config/params-local.php
   generate console/config/main-local.php
   generate console/config/params-local.php
   generate frontend/config/main-local.php
   generate frontend/config/params-local.php
   generate frontend/web/index-test.php
   generate frontend/web/index.php
   generate yii
   generate cookie validation key in backend/config/main-local.php
   generate cookie validation key in frontend/config/main-local.php
      chmod 0777 backend/runtime
      chmod 0777 backend/web/assets
      chmod 0777 frontend/runtime
      chmod 0777 frontend/web/assets
      chmod 0755 yii
      chmod 0755 tests/codeception/bin/yii
 
  … initialization completed.

Далее я буду использовать установленную MAMP версию PHPMyAdmin для создания базы данных:

создать базу данных в PHPMyAdmin

Нажмите Создать . Делая снимки экрана для учебника, я забыл нажать кнопку «Создать» и удивился, почему не смог перенести свою базу данных — ее еще не было.

Затем отредактируйте /common/config/main-local.php, чтобы включить настройки вашей базы данных:

01
02
03
04
05
06
07
08
09
10
11
<?php
return [
    ‘components’ => [
        ‘db’ => [
            ‘class’ => ‘yii\db\Connection’,
            ‘dsn’ => ‘mysql:host=localhost;dbname=yiiplus’,
            ‘username’ => ‘root’,
            ‘password’ => ‘-localmysqldevpwd-‘,
            ‘charset’ => ‘utf8’,
        ],
        ‘mailer’ => [

Затем вы готовы запустить миграцию базы данных для инициализации вашего приложения. Это в первую очередь устанавливает таблицу для управления пользователями:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
$ ./yii migrate
 
Yii Migration Tool (based on Yii v2.0.6)
 
Creating migration history table «migration»…Done.
Total 1 new migration to be applied:
    m130524_201442_init
 
Apply the above migration?
*** applying m130524_201442_init
    > create table {{%user}} … done (time: 0.007s)
*** applied m130524_201442_init (time: 0.022s)
 
 
Migrated up successfully.

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

Сначала мы отредактируем наш файл hosts, включив в него frontend.dev и backend.dev:

1
2
3
4
5
$ more /etc/hosts
 
127.0.0.1 localhost
127.0.0.1 frontend.dev
127.0.0.1 backend.dev

В моей среде разработки с MAMP я свяжу свой каталог yiiplus с htdocs MAMP:

1
2
$ cd /Applications/MAMP/htdocs/
$ ln -s ~/Sites/yiiplus /Applications/MAMP/htdocs/yiiplus

Затем я активирую (раскомментирую) включение для виртуальных хостов:

1
2
3
4
$ nano /Applications/MAMP/conf/apache/httpd.conf
 
# Virtual Hosts
Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf

И настройте пути для каждого из моих имен серверов:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
$ nano /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf
 
NameVirtualHost *:8888
 
<VirtualHost *:8888>
       ServerName frontend.dev
       DocumentRoot /Applications/MAMP/htdocs/yiiplus/frontend/web/
 
       <Directory «/Applications/MAMP/htdocs/yiiplus/frontend/web/»>
           # use mod_rewrite for pretty URL support
           RewriteEngine on
           # If a directory or a file exists, use the request directly
           RewriteCond %{REQUEST_FILENAME} !-f
           RewriteCond %{REQUEST_FILENAME} !-d
           # Otherwise forward the request to index.php
           RewriteRule .
 
           # use index.php as index file
           DirectoryIndex index.php
 
           # …other settings…
       </Directory>
   </VirtualHost>
 
   <VirtualHost *:8888>
       ServerName backend.dev
       DocumentRoot /Applications/MAMP/htdocs/yiiplus/backend/web/
 
       <Directory «/Applications/MAMP/htdocs/yiiplus/backend/web/»>
           # use mod_rewrite for pretty URL support
           RewriteEngine on
           # If a directory or a file exists, use the request directly
           RewriteCond %{REQUEST_FILENAME} !-f
           RewriteCond %{REQUEST_FILENAME} !-d
           # Otherwise forward the request to index.php
           RewriteRule .
 
           # use index.php as index file
           DirectoryIndex index.php
 
           # …other settings…
       </Directory>
   </VirtualHost>

Когда это будет завершено, вот как будет выглядеть интерфейсный сайт по адресу http://frontend.dev:8888 :

Главная страница расширенного шаблона Yii2

Внутренний сайт запросит вход в систему — для администраторов:

Yii2 Расширенный шаблон Back End Home Page

Теперь я собираюсь рассказать вам об основных функциях управления пользователями в расширенном шаблоне. Но сначала нам нужно убедиться, что мы получаем письма от Yii в нашей среде разработки.

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

Mailtrap предоставляет поддельному SMTP-серверу для вашей команды разработчиков, чтобы тестировать, просматривать и обмениваться электронными письмами, отправленными из подготовительных сред, и тестировать с реальными данными без риска спама от реальных клиентов. Для многих задач разработки, использование Mailtrap будет бесплатным.

По сути, вы регистрируетесь в Mailtrap и отправляете всю электронную почту в своей рабочей среде через ваш поддельный SMTP-сервер Mailtrap. Вот краткий видеообзор Mailtrap от Railsware:

Если вы будете следовать учебному пособию и создать учетную запись Mailtrap, вы увидите свою демо-папку «Входящие»:

Панель инструментов Mailtrap с вашими почтовыми ящиками

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

Учетные данные SMTP-сервера Mailtrap

С помощью Yii я обновляю настройки SMTP SwiftMailer в /common/config/main-local.php. Вот как это может выглядеть:

01
02
03
04
05
06
07
08
09
10
11
12
13
‘mailer’ => [
                       ‘class’ => ‘yii\swiftmailer\Mailer’,
                       ‘viewPath’ => ‘@common/mail’,
                       ‘useFileTransport’ => false,
                       ‘transport’ => [
                           ‘class’ => ‘Swift_SmtpTransport’,
                           ‘host’ => ‘mailtrap.io’,
                           ‘username’ => ’29xxxxxxxxxxx72′,
                           ‘password’ => ‘2c3xxxxxxxxxxf5’,
                           ‘port’ => ‘2525’,
                           ‘encryption’ => ‘tls’,
                                       ],
                   ],

Обратите внимание, что если вы не настроите viewPath как показано выше, вы можете столкнуться с ошибкой вокруг файлов шаблонов электронной почты, которые не были найдены .

Вот как выглядит интерфейсный экран регистрации:

Расширенный шаблон приложения Yii2 Экран регистрации

Вы попадете на главную страницу в состоянии входа в систему:

Расширенный шаблон приложения Yii2

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

Расширенный шаблон приложения Yii2

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

Сброс пароля шаблона приложения Yii2 Advanced

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

Расширенный шаблон приложения Yii2 с использованием MailTrap для SMTP

Вы можете проверить мою серию Сборка стартапа с помощью PHP , в которой используется расширенный шаблон Yii2. Кроме того, если вы заинтересованы в интеграции этого учебника с пользователем Yii2, ознакомьтесь с руководством по интеграции пользователя Yii2 с расширенным шаблоном и аутентификацией Google (скоро).

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

Следите за будущими уроками в моей серии «Программирование с Yii2», поскольку я продолжаю изучать различные аспекты фреймворка. Я приветствую тематические и тематические запросы. Вы можете опубликовать их в комментариях ниже или написать мне по электронной почте на моем сайте Lookahead Consulting .

Если вы хотите узнать, когда появится следующий учебник по Yii2, следуйте за мной @reifman в Твиттере или зайдите на страницу моего инструктора . Моя страница инструктора будет включать все статьи из этой серии, как только они будут опубликованы.