Spanish (Español) translation by Elías Nicolás (you can also view the original English article)



Si está preguntando, "¿Qué es Yii?" Echa un vistazo a Introducción al Framework Yii, que revisa los beneficios de Yii e incluye una visión general de Yii 2.0.
En esta serie de programación con Yii2, estoy guiando a los lectores en el uso de la Yii2 Framework de PHP. A medida que empiece a utilizar Yii para el desarrollo real, es posible que desee iniciar su siguiente proyecto con la plantilla avanzada de la aplicación . Entre otras cosas, ofrece funciones integradas de administración de usuarios, así como dos aplicaciones, una para el usuario y la otra, un back-end administrativo.
En este tutorial, te presentaré a la plantilla avanzada de Yii2 y te guiará a través de la configuración básica y el uso. Mientras que en Programación con Yii2: Integración de registro de usuario exploró la implementación de la gestión de usuarios en la parte superior de la plantilla básica con la extensión de usuario Yii2, este tutorial lanzará un nuevo repositorio con la plantilla avanzada en lugar de continuar los ejemplos en nuestra base Yii código base.
Antes de empezar, por favor recuerde, intento participar en las discusiones de los comentarios. Si
tiene una pregunta o sugerencia de un tema, por favor, envíe un comentario
o póngase en contacto conmigo en Twitter @reifman. También puede enviarme un correo electrónico directamente.
Si notaste que hubo un retraso en esta serie, es porque recién he vuelto de una cirugía cerebral. Gracias por tu paciencia y apoyo—Es bueno estar escribiendo de nuevo regularmente y estoy deseando continuar con la cobertura de Yii2.
Cómo es diferente la plantilla avanzada
La razón más útil para migrar a la plantilla avanzada es la implementación de las funciones de administración de usuarios, como las de inicio de sesión, registro, cierre de sesión y restablecimiento de contraseñas.
La plantilla avanzada también proporciona varios árboles de acceso para una aplicación web más grande. Cuenta con una aplicación web front-end y back-end para usuarios finales y administradores. Sin embargo, esto también podría ampliarse—por ejemplo, para moderadores o una API especial, aunque hay otras maneras de integrar estas características en una aplicación.
Aquí hay un gráfico que muestra las principales diferencias entre la básica Yii y la instalación avanzada:



En mis últimos tutoriales sobre la extensión de usuario de Yii2, estoy cada vez más impresionado con su conjunto de funciones como una alternativa a la plantilla avanzada. Sin embargo, también puede integrarse fácilmente en cualquiera de las dos instalaciones.
Vale la pena explorar la plantilla avanzada antes de comenzar un proyecto importante. Estoy por ayudarte a hacer eso.
Instalación de la plantilla avanzada
Comencemos a instalar la plantilla avanzada con Yii2. Podemos seguir las instrucciones en el proyecto de plantilla avanzada en GitHub.
Actualizando Composer
En primer lugar, nos aseguraremos de que composer tenga los paquetes que necesita:
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 |
Instalación de Yii con la plantilla avanzada
Entonces, podemos instalar Yii con la plantilla avanzada de proyecto . Vamos a llamar a nuestra aplicación tutorial 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 |
Inicializando nuestra aplicación Yii
Ahora, vamos a inicializar nuestra aplicación:
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. |
Preparar la base de datos
A continuación, utilizaré la versión instalada de PHPMyAdmin para crear la base de datos:



Haga clic en Crear. Tomando capturas de pantalla para el tutorial, me olvidé de hacer clic en crear y luego me preguntaba por qué no era capaz de migrar mi base de datos—no existía todavía.
A continuación, edite /common/config/main-local.php para incluir la configuración de la base de datos:
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' => [ |
Entonces, está listo para ejecutar la migración de la base de datos para inicializar su aplicación. Esto establece principalmente la tabla para la gestión de usuarios:
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. |
Configuración de Apache para los sitios front-end y back-end
Cuando configuramos nuestro entorno de desarrollo o producción con la plantilla avanzada, necesitamos apuntar al servidor web a una ruta raíz diferente, dos en realidad.
Primero, editaremos nuestro archivo de hosts para incluir frontend.dev y 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 |
En mi entorno de desarrollo con MAMP, enlazaré mi directorio yiiplus con htdocs de MAMP:
1 |
$ cd /Applications/MAMP/htdocs/ |
2 |
$ ln -s ~/Sites/yiiplus /Applications/MAMP/htdocs/yiiplus |
A continuación, activaré (descomente) la inclusión de hosts virtuales:
1 |
$ nano /Applications/MAMP/conf/apache/httpd.conf |
2 |
|
3 |
# Virtual Hosts |
4 |
Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf |
Y configurar rutas para cada uno de los nombres de mi servidor:
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> |
Una vez que esté completo, aquí es lo que el sitio web front-end se verá en http://frontend.dev:8888:



El sitio back-end le pedirá que inicie la sesión—es para los administradores:



Exploración de la gestión de usuarios
Ahora voy a guiarle a través de las características básicas de administración de usuarios de la plantilla avanzada. Pero primero debemos asegurarnos de que estamos recibiendo correos electrónicos de Yii en nuestro entorno de desarrollo.
Configuración la entrega de correo electrónico
La administración de usuarios envía correos electrónicos para restablecer las contraseñas, por lo que debemos activar la configuración SwiftMailer SMTP de Yii. Voy a utilizar Mailtrap.io, que exploré en un tutorial anterior, Introducción a Mailtrap: Un servidor SMTP falso para pruebas de preproducción de correo electrónico de la aplicación.
Mailtrap
proporciona un servidor SMTP falso para que su equipo de desarrollo
pueda probar, ver y compartir correos electrónicos enviados desde los
entornos de preproducción y probar con datos reales sin el riesgo de
enviar spam a clientes reales. Para muchas tareas de desarrollo, el uso de Mailtrap será gratuito.
Esencialmente, se registra en Mailtrap y envía todo el correo electrónico del entorno de preproducción a través de su servidor SMTP Mailtrap falso. Aquí hay una breve descripción general de Mailtrap por Railsware:
Si sigue el tutorial y crea una cuenta de Mailtrap, verá su bandeja de entrada de demostración:



Y, al hacer clic en el icono Configuración en la lista de buzones de entrada, verá que cada bandeja de entrada de Mailtrap tiene sus propias credenciales de servidor SMTP:



Con Yii, estoy actualizando la configuración SMTP de SwiftMailer en /common/config/main-local.php. Esto es como puede verse:
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 |
],
|
Tenga
en cuenta que si no personaliza viewPath
como se muestra arriba, puede
encontrarse con un error en torno a los archivos de plantilla de correo
electrónico que no se encuentran.
Inscripción y registro
Esto es lo que se ve en la pantalla de registro front-end:



Se mostrar la página de inicio en el estado inicio de sesión:



Ingresar
Esta es la pantalla de inicio de sesión:



Olvidó su contraseña
Y aquí está la pantalla Olvido su contraseña:



Si solicita una nueva contraseña, la encontrará en Mailtrap:



¿Que sigue?
Usted puede desear comprobar hacia fuera mi serie creacion de su startup con PHP, que utiliza la plantilla avanzada de Yii2. Además, si está interesado en integrar este tutorial con Yii2 User, echa un vistazo a la guía de integración de Yii2: User con la plantilla avanzada y la autenticación de Google (próximamente).
Espero que haya disfrutado aprendiendo sobre la Plantilla Avanzada de Yii2. Tengo curiosidad por escuchar sus sugerencias en los comentarios sobre si prefiere la plantilla básica.
Vea los próximos tutoriales en mi serie Programación Con Yii2 mientras continúo sumando diferentes aspectos del framework. Agradezco las peticiones de características y temáticas. Puedes publicarlos en los comentarios a continuación o enviarme un correo electrónico a mi sitio web de Lookahead Consulting.
Si quieres saber cuándo llega el próximo tutorial de Yii2, sígueme @reifman en Twitter o consulta mi página de instructor. Mi página de instructor incluirá todos los artículos de esta serie tan pronto como se publiquen.