50. Mostrar el detalle de un post

En este capítulo, aprenderás cómo mostrar el detalle de un post en tu blog utilizando Laravel. Comenzaremos por comprender los conceptos fundamentales de los modelos en Laravel, y cómo utilizarlos para recuperar los datos de un post específico de tu base de datos. Luego, te guiaremos a través del proceso de diseño y construcción de una ruta y una vista para mostrar el detalle de un post. Aprenderás cómo utilizar las variables de ruta en Laravel para recuperar el ID del post solicitado, y cómo utilizar las funciones de Blade para mostrar los detalles del post en una vista detallada y atractiva. También te mostraremos cómo agregar comentarios a tu post y cómo utilizar relaciones entre modelos para mostrar los comentarios junto con el post correspondiente.


4 comentarios

Inicia sesión para comentar

Comentarios:

  • Walter

    Walter hace 1 año

    ? 3° Completamos el Contenido relacionado en show.blade.php:

     

    {{-- Contenido relacionado --}}
    <aside>
    	<h1 class="text-2xl font-bold text-gray-600 mb-4">
    		Más en {{ $post->category->name }}
    	</h1>
      	<ul>
        @foreach ($similares as $similar)
            <li class="mb-4">
              <a class="flex" href="{{ route('posts.show', $similar) }}">
                @if ($similar->image)
                <img class="w-36 h-20 object-cover object-center" src="{{ Storage::url($similar->image->url) }}" alt="{{ $similar->name }}">
                @else
                <img
                  class="w-36 h-20 object-cover object-center"
                  src="https://cdn.pixabay.com/photo/2017/04/16/18/08/test-tube-2235388_960_720.png"
                  alt="{{ $similar->name }}">
                @endif
                <span class="ml-2 text-gray-600">{{ $similar->name }}</span>
              </a>
            </li>
        @endforeach
      	</ul>
    </aside>

     

  • Walter

    Walter hace 1 año

    ? 4° Volver responsiva la vista show.blade.php

     

    <div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
    	{{-- Contenido principal --}}
    	<div class="lg:col-span-2">

     

  • Walter

    Walter hace 1 año

    ? 2° Crear la vista encargada de mostrar el contenido de un post

     

    ? Creamos el archivo show.blade.php en /resources/views/posts/:

     

    <x-app-layout>
      <div class="container py-8">
        <h1 class="text-4xl font-bold text-gray-600">{{ $post->name }}</h1>
        <div class="text-lg text-gray-500 mb-2">
          {{ $post->stract }}
        </div>
        <div class="grid grid-cols-3">
          {{-- Contenido principal --}}
          <div class="col-span-2">
            <figure>
              <img class="w-full h-80 object-cover object-center" src="{{ Storage::url($post->image->url) }}" alt="{{ $post->name }}">
            </figure>
            <div class="text-base text-gray-500 mt-4">
              {{ $post->body }}
            </div>
          </div>
          {{-- Contenido relacionado --}}
          <aside>
    
          </aside>
        </div>
      </div>
    </x-app-layout>

     

    ? Para completar el Contenido relacionado primero editamos el controlador PostController.php

     

    public function show(Post $post)
    {
    	$similares = Post::where('category_id', $post->category_id)
    		->where('status', 2)
    		->where('id', '!=', $post->id)
    		->latest('id')
    		->take(4)
    		->get();
    	
    	return view('posts.show', compact('post', 'similares'));
    }

     

  • Walter

    Walter hace 1 año

    ? 1° Crear la ruta encargada de mostrar el contenido de un post

     

    ? En el archivo web.php agregamos:

    Route::get('posts/{post}', [PostController::class, 'show'])
    	->name('posts.show');

     

    ? En el controlador PostController.php agregamos:

     

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

     

    ? En la vista index.blade.php agregamos el valor de href:

     

    <h1 class="text-4xl text-white leading-8 font-bold">
    	<a href="{{ route('posts.show', $post) }}">
    		{{ $post->name }}
    	</a>
    </h1>