Curso de Desarrollo Web con PHP y Yii2

Redirecciones y flash en Yii2

Curso de Desarrollo Web con PHP y Yii2

Contenido del curso

Modelos, vistas y controladores

Enlaces, navegación y tablas intermedias

Redirecciones y flash en Yii2

Resumen

Cuando trabajas con controladores en Yii, devolver un simple string se queda corto. Lo realmente útil aparece cuando aprendes a redirigir entre acciones, mostrar mensajes flash en sesión y manejar parámetros opcionales en tus búsquedas. Aquí verás cómo encadenar esos elementos dentro del web controller para construir flujos más cercanos a una aplicación real.

¿Cómo redirigir entre acciones con this->redirect en Yii?

Cuando una acción no encuentra el recurso solicitado, lo correcto no es romper la vista, sino mandar al usuario a otro lado. Yii lo resuelve con $this->redirect(), que recibe un arreglo donde el primer elemento es la ruta controlador/acción y el resto son parámetros llave-valor.

En el ejemplo del libro inexistente, el controlador detectaba un objeto book en null e intentaba leer title, lo que reventaba la vista. La solución fue reemplazar esa lectura por un redirect hacia site/index [01:25]:

php return $this->redirect(['site/index']);

El return es obligatorio. redirect() no ejecuta la respuesta, solo la construye y la devuelve. Si olvidas el return, el navegador nunca recibe la instrucción.

¿Qué hace this->redirect en Yii? Construye un objeto response que indica al navegador ir a otra ruta. Necesita return porque la acción debe devolver ese response, no ejecutarlo internamente.

¿Cuándo conviene usar el shortcut goHome?

Yii ofrece return $this->goHome() como atajo para mandar al usuario a la página de inicio configurada en la aplicación [03:10]. Es práctico cuando no necesitas especificar ruta ni parámetros, pero pierdes flexibilidad: si quieres ir a un listado distinto, vuelve al redirect con arreglo.

¿Cómo mostrar mensajes flash con setFlash y bootstrap?

Aunque todavía no exista un sistema de usuarios, Yii ya gestiona una sesión en cuanto alguien entra al sitio. Eso te permite registrar mensajes temporales que se muestran una sola vez, conocidos como flash messages.

La sintaxis usa el objeto principal de la aplicación:

php Yii::$app->session->setFlash('error', 'Ese libro no existe');

setFlash recibe dos parámetros: el tipo de mensaje y el texto. El primero no se manda en RGB ni en hex, sino con los nombres de color de bootstrap: success, info, warning, error, entre otros [04:30]. Yii está tan acoplado a bootstrap que pinta el mensaje automáticamente con el estilo correspondiente.

El flash no se devuelve, solo se registra en la sesión. La vista lo recoge en la siguiente petición, lo pinta y permite cerrarlo. Por eso suele combinarse con un redirect: registras el mensaje, mandas al usuario al listado y allí ve el aviso.

¿Qué es un mensaje flash? Es un texto guardado en sesión que se muestra una sola vez en la siguiente petición. Útil para confirmar acciones o avisar de errores tras un redirect.

¿Cómo crear un AuthorController con búsqueda opcional?

Para practicar la navegación entre controladores, se crea un segundo archivo AuthorController.php que extiende de Controller y replica la estructura del de libros con dos acciones: actionDetail y actionAll [07:00].

actionDetail recibe un $id, busca con Author::findOne($id), y si el resultado está vacío registra un flash de tipo warning y redirige al listado completo:

php return $this->redirect(['author/all']);

Esto aporta una lógica más amable: si el autor no existe, en lugar de mandar a home, llevas al usuario a la lista donde sí puede seguir navegando.

¿Cómo aceptar parámetros opcionales en una acción?

El truco está en la sobrecarga de parámetros con valor por defecto. Si declaras actionAll($search) sin valor por defecto y no mandas el parámetro, Yii devuelve un error 400 Missing parameters [10:15]. La solución es asignar null:

php public function actionAll($search = null) { ... }

Así la acción acepta cero o un parámetro y decide qué hacer dentro:

  • Si $search es null, trae todos los autores con Author::find()->all().
  • Si viene un string, filtra usando el query builder con condición like.

¿Cuál es la diferencia entre igualdad y like en el query builder?

Cuando pasas un arreglo llave-valor a where(), Yii interpreta una igualdad estricta. Para usar operadores como like, >, < o between, necesitas un arreglo de tres elementos donde el primero es el operador [12:40]:

php Author::find()->where(['like', 'name', $search])->all();

Con like, buscar Jack devuelve dos resultados: Jack London y Jack Kerouac. Con igualdad solo coincidirían nombres exactos, lo que rara vez es lo que esperas en un buscador.

Habilidades y conceptos que se trabajan en la clase

  • Redirect entre acciones con $this->redirect(['controlador/acción', 'param' => 'valor']) siempre con return [01:25].
  • Atajo goHome para volver al inicio sin construir el arreglo de ruta [03:10].
  • Flash messages registrados con Yii::$app->session->setFlash($tipo, $mensaje) y pintados con clases de bootstrap [04:30].
  • Sobrecarga con valor por defecto en parámetros de acción para hacerlos opcionales [10:15].
  • Query builder con operadores mediante arreglos de tres elementos para like, between y comparadores [12:40].
  • Serialize de modelos con findAll() para devolver colecciones completas en una acción.

Con estas piezas el controlador deja de ser un eco de strings y empieza a coordinar de verdad: busca datos, decide rutas, deja avisos en sesión y maneja parámetros opcionales. ¿Cómo aplicarías un flash de tipo success después de guardar un registro en tu propio proyecto?