Programación con Yii2 enrutamiento y creación de URL

Si estás preguntando, "¿Qué es Yii?" revisa Introducción al marco Yii, que revisa los beneficios de Yii e incluye una descripción general de Yii 2.0.

Introducción al enrutamiento

En esta serie de Programación con Yii2, guío a los lectores en el uso del Marco de trabajo de Yii2 para PHP. 

En el tutorial de hoy, revisaré el enrutamiento y la creación de URL en Yii. Cuando llega una solicitud de navegador al archivo index.php de su aplicación Yii, debe analizarse para determinar a qué controlador y método llamar. Eso es enrutamiento. El proceso inverso de vincular partes de su aplicación es la creación de URL, que se realiza mejor mediante programación.

Yii proporciona mucha flexibilidad en la administración de enrutamiento y generación de enlaces. Sígueme mientras repaso lo básico..

Antes de comenzar, recuerde que trato de participar en las discusiones a continuación. Si tiene alguna pregunta o sugerencia sobre un tema, envíe un comentario a continuación o contácteme en Twitter @reifman. 

Nota: Si notó la brecha entre los episodios de la serie Programación Yii, es porque tenía que tener cirugía cerebral el año pasado. Gracias por su paciencia y apoyo, es bueno volver a escribir con regularidad y espero continuar con la cobertura de Yii2..

Fondo

El administrador de URL de Yii es el componente de la aplicación que se usa para analizar solicitudes entrantes, parseRequest (), así como para generar nuevas URL mediante programación, createUrl ().

Las solicitudes se analizan en rutas, que toman esta forma:

ControllerID / ActionID

Esencialmente, el Administrador de URL le indica a Yii qué controlador y método de acción debe crear e invocar.

A lo largo de su aplicación, deberá generar URL que se puedan analizar correctamente cuando los usuarios lo soliciten. Utilizando createUrl () para esto se asegura que las solicitudes entrantes puedan ser mapeadas exitosamente.

Aquí hay un ejemplo:

utilizar yii \ helpers \ Url; // Url :: to () llama a UrlManager :: createUrl () para crear una URL $ url = Url :: to (['message / view', 'id' => 100]);

Sin un marco MVC, cualquier archivo PHP en su aplicación puede responder directamente a las solicitudes, lo que significa que debe administrar la seguridad en cada archivo. Con MVC y el administrador de URL, la seguridad básica se proporciona a un nivel central y el acceso a su aplicación está bastante controlado. Esta es una de las razones clave para no molestarse en los marcos de PHP de vainilla.!

Vamos a profundizar en algunos detalles más sobre el tema de hoy.

Enrutamiento

Las solicitudes de los usuarios llegan a través del navegador a través de la web a su servidor en forma de URL. Veamos uno de un usuario que solicita una página de inicio de sesión en mi aplicación de la serie de inicio, Meeting Planner:

https://meetingplanner.io/index.php/site/login

Mi aplicación usa URL bonitas en Yii (descritas a continuación); notar menos variables de consulta. Sin eso, la URL podría verse así:

https://meetingplanner.io/index.php?r=site/login

En todo caso, ParseRequest procesa la URL y crea e invoca a SiteController.php con actionLogin ().

Con URL bonitas, el administrador de URL revisará las reglas registradas. En el Meeting Planner, están en el archivo de configuración común:

'components' => ['urlManager' => ['class' => 'yii \ web \ UrlManager', ... 'rules' => ['/'=>'/ vista ','//'=>'/','/'=>'/',' defaultRoute '=>' / site / index ',],],

Si ninguna regla coincide o si hay un error al llegar a un controlador y una acción, se generará una excepción de error 404, yii \ web \ NotFoundHttpException.

Sin embargo, encima hay una Ruta por defecto configurado para ir a la página de inicio en SiteController actionIndex, que cubrirá las solicitudes de URL no coincidentes.

Veamos más de cerca una de las reglas anteriores:

'/'=>'/ver',

Dice que si recibe una solicitud de un controlador seguida de una palabra (\ w+) seguido de una barra y un número (\re+), envíe esa solicitud al archivo del controlador con el nombre correspondiente e invoque actionView ($ id) con el número, es decir. reunión / vista / 130 llamadas MeetingController.php actionView (130).

Definir sus reglas es importante y puede aumentar o disminuir el rendimiento general o el tiempo de respuesta de su sitio. Es posible que desee obtener más información sobre la parametrización avanzada de rutas de Yii para optimizar el rendimiento. Las reglas de escritura pueden ser más detalladas, que no voy a entrar hoy.

URL bonitas

Como mencioné anteriormente, las URL bonitas cambian del enrutamiento basado en parámetros de Yii a un enrutamiento basado en rutas. Por ejemplo, esta URL solicita ver una reunión con ID 130.

https://meetingplanner.io/meeting/130

O esta URL solicita ver un lugar llamado El Diablo Coffee:

https://meetingplanner.io/place/el-diablo-coffee-co

Es posible que desee leer Cómo programar con Yii2: Comportamiento demoledor (Envato Tuts +) para obtener más información sobre la implementación de las babosas para administrar este tipo de URL nombradas..

Para habilitar las URL bonitas, necesitas activar enablePrettyUrl en Administrador de URL:

'urlManager' => ['class' => 'yii \ web \ UrlManager', // Deshabilitar index.php 'showScriptName' => false, // Deshabilitar r = rutas 'enablePrettyUrl' => true, 'rules' => array ('/'=>'/ vista ','//'=>'/','/'=>'/',),],

Nota: En este momento, también puede deshabilitar index.php en la URL con showScriptName; sin embargo, todavía estoy luchando con la creación de URL sin index.php en mi proyecto de aplicación actual. El seguimiento de esto está en mi lista de tareas.

También necesita crear un archivo .htaccess y habilitar mod_rewrite para apache:

RewriteEngine on # Si existe un directorio o un archivo, utilícelo directamente RewriteCond% REQUEST_FILENAME! -F RewriteCond% REQUEST_FILENAME! -D # De lo contrario, reenvíelo a index.php RewriteRule. index.php

Modo CatchAll

Otra buena característica del enrutamiento Yii es la capacidad de colocar fácilmente su aplicación en modo de mantenimiento. Solo define un catchAll configuración en la configuración de la aplicación, la acción y la vista:

 dirname (dirname (__ DIR__)). '/ vendor', 'language' => 'en', // inglés 'catchAll' => ['site / offline'], 'components' => ['urlManager' => [ 

También agregué un actionOffline en SiteController.php y una vista offline.php.

Creando URLs

Yii proporciona un método auxiliar yii \ helpers \ Url :: to () para crear enlaces dentro de su aplicación que corresponderán correctamente con las reglas de análisis. La generación de enlaces mediante programación con la infraestructura de Yii ayudará a mantener la capacidad de administración y portabilidad de su código de aplicación.

Aquí hay algunos ejemplos de cómo crear URLs a partir de la documentación de Yii:

utilizar yii \ helpers \ Url; // crea una URL para una ruta: /index.php?r=post%2Findex echo Url :: to (['post / index']); // crea una URL a una ruta con parámetros: /index.php?r=post%2Fview&id=100 echo Url :: to (['post / view', 'id' => 100]); // crea una URL anclada: /index.php?r=post%2Fview&id=100#content echo Url :: to (['post / view', 'id' => 100, '#' => 'content'] ); // crea una URL absoluta: http://www.example.com/index.php?r=post%2Findex echo Url :: to (['post / index'], true); // crea una URL absoluta utilizando el esquema https: https://www.example.com/index.php?r=post%2Findex echo Url :: to (['post / index'], 'https');

Por supuesto, si el formato bonito de URL está habilitado, las URL creadas serán diferentes.

Este es un ejemplo de cómo generé un enlace en el control de cuadrícula de la lista de reuniones para el Planificador de reuniones:

regreso '
$ model-> id]). '">'. $ model-> subject. '
'. $ model-> getMeetingParticipants ($ model-> id).'
';

También incluyo muchos enlaces en los correos electrónicos salientes para el Planificador de reuniones, que requieren varios argumentos idénticos para validar el acceso de los usuarios. Creé un ayudante para construir estos comandos que usa Url: a ():

clase MiscHelpers public static function buildCommand ($ meeting_id, $ cmd = 0, $ obj_id = 0, $ actor_id = 0, $ auth_key = ") return Url :: to (['meeting / command', 'id' => $ meeting_id, 'cmd' => $ cmd, 'actor_id' => $ actor_id, 'k' => $ auth_key, 'obj_id' => $ obj_id], true);

Escribir código PHP en bruto para crear manualmente enlaces como estos requiere mucho tiempo, es propenso a errores y es menos portátil. Url :: a () ahorra mucho tiempo tanto en la codificación como en la resolución de problemas.

Nota: Estaré escribiendo sobre Yii Ayudantes En un próximo episodio. Usar una función de acceso común dentro de mi ayudante me ahorra mucho esfuerzo y reduce la codificación general.

Para concluir

Comenzar con un MVC puede ser confuso y las rutas y las URL pueden jugar un papel en esto. Tal vez debería haber escrito sobre rutas al principio de la serie. En cualquier caso, espero que haya aprendido algunas cosas nuevas sobre Yii y su diseño flexible de aplicaciones con rutas y URL..

Vea los próximos tutoriales en nuestra serie Programming With Yii2 a medida que continuamos explorando diferentes aspectos del marco. Por ejemplo, avíseme si desea ver más sobre enrutamiento avanzado. Acojo con agrado las solicitudes de características y temas. Puede publicarlos en los comentarios a continuación o enviarme un correo electrónico a mi sitio web de Lookahead Consulting.

Si desea explorar una aplicación Yii2 más avanzada ahora, consulte nuestra serie de inicio y el Planificador de reuniones. La aplicación ahora está en versión alfa y puede usarla para programar reuniones con amigos. También puede descargar el código; es de código abierto.

Si desea saber cuándo llegará el próximo tutorial de Yii2, síganme @reifman en Twitter o consulte la página de mi instructor. La página de mi instructor incluirá todos los artículos de esta serie tan pronto como se publiquen.. 

enlaces relacionados

  • Enrutamiento y URL Creación-Yii 2.0 Documentación
  • Cómo programar con Yii2: Comportamiento demoledor (Envato Tuts +)
  • Yii2 Developer Exchange