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.

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

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:

Únete a nuestra comunidad en Discord y comparte con los usuarios y autores de Styde, 100% gratis.

Únete hoy

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

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