En esta lección mejoraremos el listado de post agregando elementos, como status y categoría, para poder identificar los posts fácilmente. Además trabajaremos con los seeders para crear registros con fechas de creación y estatus diferentes, de manera tal que tengamos datos ficticios que nos permitan ver diferentes resultados cuando filtremos los posts. Por supuesto nos apoyaremos en las pruebas escritas durante todo el curso para garantizar que todo sigue funcionando correctamente.
Mira el código en GitHub: actual, resultado, comparación.
Si ya eres parte de Styde y aún no tienes acceso al repositorio ingresa al canal #app de nuestro Slack y solicita tu acceso indicando tu usuario de Github:
Notas
Por Clemir Rondón.
Los cambios en el menú principal, secundarios: filtros por status y por categoría, también la posibilidad de filtrar tanto por un status y categoría en particular y demás mejoras en el diseño que fueron realizados:
Mira el código en GitHub: actual, resultado, comparación.
La directiva de Blade @include
te permite incluir una vista Blade dentro de otra, esta vista incluida o partials tiene disponible todas las variables que son pasadas a la vista padre pero si deseas añadir variables adicionales las puedes pasar como segundo parámetro a través de un array: @include('post.item', ['post' => $post])
o como en el video usando el método compact
: @include('post.item', compact('post'))
Los objetos fecha created_at
y updated_at
de cada modelo son por defecto instancias de Carbon con lo cual tenemos disponibles un gran cantidad de métodos con los que podemos interactuar de una manera sencilla. Puedes conocer cómo trabajar con este componente con el tutorial: Manipular fechas con el componente Carbon en Laravel 5
Con el método diffForHumans
se muestra un mensaje para la diferencia entre dos fechas más fácil de entender para nosotros. Por defecto, este mensaje se muestra en inglés, si tu aplicación está en español debes configurar la localización del componente Carbon usando el service provider /app/Providers/AppServiceProvider.php
o cualquier otro para agregar:
Carbon::setLocale('es');
Si quieres que tus atributos de fechas en modelos también sean instancias de Carbon tienes que incluirlos en el array $dates
como se explica en el tutorial: «Date Mutators» con Eloquent en Laravel.
Para tener registros de un modelo con fechas diferentes usando los seeders podemos asignarle al atributo created_at
una fecha aleatoria entre la fecha de hoy y un mes hacia atrás dentro del método factory
:
'created_at' => Carbon::now()->subHours(rand(0, 720)),
Puedes crear cualquier fecha usando no solo el método subHours
sino todos los disponibles en la documentación oficial de Carbon.
Recuerda que para actualizar los cambios hechos en los seeders debes ejecutar nuevamente las migraciones borrando todas las tablas antes con el comando: php artisan migrate:refresh
y para volver a ejecutar la carga de datos con los seeders: php artisan db:seed
o los dos comandos a la vez con php artisan migrate:refresh --seed
El desarrollo del método markAsAnswer
para marcar un comentario como respuesta a un post lo realizamos en la lección Desarrollo con pruebas de integración y regresión en Laravel 5.3 (TDD).
Con la directiva de Blade @each
puedes combinar el uso de un @foreach
y la directiva @include
en una sola línea, es decir,
@each('posts.item', $posts, 'post')
es equivalente a escribir:
@foreach ($posts as $post) @include('posts.item', compact('post')) @endforeach
Aprende más con este tutorial de la directiva @each de Blade.
Ejercicio
Envia un Pull Request para mejorar la vista cuando no haya ningún post para un categoría o filtro.
Material relacionado
- Filtrar posts por status con Laravel y TDD
- Filtrar posts por categorías con Laravel y TDD
- Manipular fechas con el componente Carbon en Laravel 5
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.
Lección anterior Filtrar posts por status con Laravel y TDD Lección siguiente Lista con orden dinámico con Blade y Eloquent en Laravel