Configuración de Rutas y Controladores en Laravel para Listado de Posts

Clase 19 de 37Curso de Introducción a Laravel 6

Resumen

¿Cómo configurar la parte visual de tu sitio web?

Configurar la parte visual de un sitio web es fundamental para garantizar que los usuarios tengan una experiencia atractiva y funcional. Vamos a trabajar en la visualización de una lista de publicaciones y de una publicación en particular. El primer paso es modificar las rutas dentro de nuestra configuración web para reflejar correctamente la estructura deseada.

¿Cómo modificar y personalizar las rutas?

Modificar y personalizar las rutas es esencial para dirigir a los usuarios a las vistas correctas dentro de un sitio web. Vamos a proceder a hacer un par de ajustes:

  1. Personaliza la ruta de inicio:

    • Cambia la ruta raíz para que apunte a postsController@index, y asegúrate de utilizar nombres en plural para las listas.
  2. Configura rutas para publicaciones individuales:

    • Usa un parámetro dinámico en la ruta, como Blog/{post}, y dirígelo al método post en singular.
Route::get('posts/', [PostsController::class, 'index']);
Route::get('blog/{post}', [PostsController::class, 'show']);

¿Cómo crear y configurar el controlador?

El controlador es donde se maneja la lógica principal para tus rutas. Aquí es donde definimos cómo se deben presentar las publicaciones:

  1. Crear el controlador:

    • Utiliza Artisan para crear el controlador: php artisan make:controller PostsController.
  2. Definir métodos en el controlador:

    • Método index: Imprime y organiza todos los post.
    • Método show: Muestra un post individual usando inyección de dependencia.
public function index()
{
    $posts = Post::orderBy('created_at', 'desc')->paginate();
    return view('posts.index', compact('posts'));
}

public function show(Post $post)
{
    return view('posts.show', compact('post'));
}

¿Cómo implementar las vistas?

Las vistas permiten a los usuarios visualizar los datos. Hay que configurar dos vistas, una para una lista completa de publicaciones y otra para una sola publicación.

  1. Crear archivos de vista:

    • Crea resources/views/posts/index.blade.php para la lista.
    • Crea resources/views/posts/show.blade.php para una sola publicación.
  2. Configurar contenido de la vista:

    • Enumera los posts iterando y creando tarjetas dinámicamente para cada uno.
<!-- index.blade.php -->
@foreach ($posts as $post)
  <div class="card">
    <div class="card-body">
      <h5 class="card-title">{{ $post->title }}</h5>
      <p class="card-text">{{ $post->excerpt }}</p>
      <a href="{{ route('posts.show', $post) }}">Leer más</a>
    </div>
  </div>
@endforeach
  • En show.blade.php imprime directamente el contenido del post seleccionado.
<!-- show.blade.php -->
<div class="card">
  <div class="card-body">
    <h1 class="card-title">{{ $post->title }}</h1>
    <p class="card-text">{{ $post->body }}</p>
    <footer>
      <p>Escrito por: {{ $post->user->name }} el {{ $post->created_at->format('d-m-Y')}}</p>
    </footer>
  </div>
</div>

¿Cómo configurar las relaciones entre modelos?

Para manejar datos de forma eficiente, como quién escribió un post, configura relaciones entre los modelos:

  1. Una relación de un usuario a muchos post:

    • En el modelo Usuario: public function posts() { return $this->hasMany(Post::class); }
  2. Un post pertenece a un usuario:

    • En el modelo Post: public function user() { return $this->belongsTo(User::class); }

De esta forma, creamos una estructura funcional que soporta una visualización dinámica y personalizada de los contenidos, facilitando la interacción del usuario con el sitio.