Как я могу показать конкретную запись в блоге по ее идентификатору при нажатии кнопки показать больше в записи в блоге в моем приложении laravel?

#php #laravel

Вопрос:

Я пытаюсь настроить небольшое приложение Laravel, в котором у меня есть записи в блоге , и когда я нажму на show more него, я отобразю блог с его определенным идентификатором.

Это мои маршруты:

 Route::get('blog', [BlogController::class, 'show']);
Route::get('blog-single/{blog}', [BlogController::class, 'showMore']);
 

{blog} Пуля в блоге-одиночный маршрут должен принимать в id качестве параметра в showMore методе и находить blog соответствующий идентификатор из Blog модели, как я добавил здесь.

 namespace AppHttpControllers;

use AppModelsBlog;
use IlluminateHttpRequest;

class BlogController extends Controller
{
    public function show() {
        return view('blog', [
            'blogs' => Blog::take(5)->latest()->get(),
        ]);
    }
    
    public function showMore($id) {
        $blog = Blog::find($id);
        return view('blog-single', [
            'blog' => $blog,
        ]);
    }
}
 

Мои блоги есть, blog.blade.php и они динамически извлекаются из базы данных, как показано в show методе из BlogController :

 <div id="body">
    <h1><span>blog</span></h1>
    <div>
        <ul>
            @foreach($blogs as $blog)
                <li class="blog-post">
                    <a href="blog-single" class="figure">
                        <img src="{{asset('/storage/app/public/product/stach2.jpg')}}" alt="">
                    </a>
                    <div>
                        <h3>{{$blog->title}}</h3>
                        <p>{{$blog->body}}</p>
                        <a href="blog-single{{'/'}}{{$blog->id}}" class="more">read this</a>
                    </div>
            @endforeach
        </ul>
    </div>
</div>
 

Меня перенаправляют blog/blog-single/$id , но он также отображает 404 страницу. Я не уверен, в чем проблема.

Комментарии:

1. Ваш HTML-код неправильно отформатирован… вы пропускаете заключительную li часть … также span в h1 контексте без контекста ? Кроме того, ознакомьтесь с документацией… не нужно этого делать $blog = Blog::find($id) , когда вы можете просто использовать implicit binding

Ответ №1:

Ошибка вызвана href добавлением текущего URL-адреса.

Так что измените эту строку

  <a href="blog-single{{'/'}}{{$blog->id}}" class="more">read this</a>
 

вместо этого используйте

  <a href="{{url('blog-single/',[$blog->id])}}" class="more">read this</a>
 

Также лучше создавать названия маршрутов, как показано ниже

 Route::get('blog-single/{blog}',[BlogController::class,'showMore'])->name('blogSingle');
 

затем в файле blade

  <a href="{{route('blogSingle',$blog->id)}}" class="more">read this</a>
 

Комментарии:

1. Автор, пожалуйста, прочитайте больше о url помощнике. Документация-ваш друг…

2. @matiaslauriti.спасибо. вы всегда пытаетесь улучшить ответы других. отлично .да благословит вас Господь 🙂

3. Спасибо вам за помощь всем, я открываю вопросы и вижу, что вы уже ответили на них, это потрясающе !