#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. Спасибо вам за помощь всем, я открываю вопросы и вижу, что вы уже ответили на них, это потрясающе !