jairogarcíarincón

Noticias en el back-end


10.6K

Introducción



Puesto que ya previamente en el front-end habíamos creado el modelo Noticia, en este apartado podemos directamente desarrollar las acciones relativas a la gestión de noticias desde el panel de administración, así como sus vistas asociadas.


Archivo de rutas



No obstante, lo primero que debemos hacer es añadir a nuestro archivo routes/web.php, al que además le añadiremos una ruta "comodín" o ruta por defecto para redireccionar a la home en caso de no encontrar una ruta válida:



Como ves, estas rutas usan el middleware Roles que ya creamos y utilizamos en usuarios, si bien en este caso lo que se comprueba es que el usuario tenga acceso a noticias.


NoticiaController



Modifica el archivo app/Http/Controller/NoticiaController con el siguiente contenido:



IMPORTANTE: Para poder modificar y subir imágenes, la carpeta public/img debe ser accesible para escritura por el usuario www-data:www-data, que es el que asigna Apache2 al usuario del navegador.

Modelo Noticia



A la hora de guardar una nueva noticia, hemos utilizado el método create de Laravel, que, tal y como ya hicimos en Usuario, nos obliga a indicar qué atributos del modelo son asignables en masa o fillables.

Modifica el modelo Noticia (app/Models/Noticia.php):




NoticiaRequest



También en este caso hemos creado un FormRequest para validar ciertos datos de las noticias.

Para ello, primero hemos creado NoticiaRequest desde la consola con el comando:



Y luego lo hemos editado para incluir nuestras reglas (archivo app/Http/Requests/NoticiaRequest.php):




Vista de listado de noticias (archivo resources/views/admin/noticias/index.blade.php)





listado noticias



Vista de creación/edición de noticias (archivo resources/views/admin/noticias/editar.blade.php)





editar noticia



Ejercicios propuestos


  1. Modifica el proyecto para que sea obligatorio que las noticias incluyan una imagen.

  2. Modifica el proyecto para que el único formato de imagen admitido sea jpg.

  3. Usando la librería Intervention Image, modifica el proyecto para que admita distintos tipos de imágenes, pero estas se conviertan a png con un ancho fijo de 900px (y un alto proporcional que no deforme la imagen).



Publicado el 29 de Enero de 2025

bloggestor de contenidoslaravelphpcssjquery