Jordi
Jordi
Laravel
Comparte:

No me muestra los registros

Hola a todos a ver si me podeis ayudar tengo una ruta creada en el archivo web.php
Route::get('posts/{$post},[PostController::class, 'show'])->name('posts.show');
La funcion de mi PostController.php
public function show(Post $post){
return $post;
}
Y en mi pagina index le creo el vinculo
<a href="{{route('posts.show',$post)}}>{{$post->name}}</a>
El nombre del post me sale(eso significa que la variable llega) pero cuando le doy al nombre que es un vinculo en la url del navegador me aparece blog.test/posts/100 que es el numero del post, pero en pantalla en vez de aparecer los registros de este me pone EXTRAVIADO 404.
Espero me podais ayudar, gracias
JC SO
JC SO (494 xp)
//normal
Route::get('posts/{post}', [PostController::class, 'show'])->name('posts.show');

Route::get('posts/{post:slug}', [PostController::class, 'show'])->name('posts.show');
//tendras una url amigable  ten cuenta que debes tener campo slug en tabla
//si ya no quieres usar  getRouteKeyName
//public function getRouteKeyName()
//{
//    return 'slug';
//}


gssa
gssa (986 xp)
xisten un par de cuestiones a tener en cuenta en tu situacion que pueden aludir a tu problema, para empezar tu ruta:
////////////. env//////
APP_URL=http://localhost
/////////////////////////////////////////// web.php//////////
Route::get('/post/{$post}', [PostController::class, 'show'])->name('posts.show');  // tu ruta
Route::get('/post/{post}', [PostController::class, 'show'])->name('posts.show'); // como deberia estar definida
desde mi percepcion tienes un error ya que el parametro que recibes en tu url tiene el simbolo de $ que antecede al nombre de tu variable, Ademas la cuestion a tener en cuenta es como definas en tu modelo \App\Models\Post el binding o lo que menciona JC SO para tener urls amigables utilizando la funcion getRouteKeyName() ejemplo 
<?php

namespace App\Models;
[...]
class Post extends Model
{
    [...]

    public function getRouteKeyName()
    {
        return 'url';
       // return 'slug'; // puedes retornar cualquier otro elemento que consideres pertinente para obtener una url amigable segun sea el caso
    }
    [...]
otra cosa a tener en cuenta es en tu controller ya que tu metodo debe tener el mismo nombre que defines en tu ruta, para el ejemplo que tienes seria algo asi donde
public function show(Post $post)
{
        return view('posts.show', compact('post'));
}
donde $post es el nombre que definiste en tu ruta '/post/{post}'