猿问

我的帖子不会路由到他们的详细信息页面

我正在尝试用 laravel 制作一个博客应用程序。我的问题是,我已在 allnews.blade.php 视图中列出了我的帖子,并且我将文本描述为可路由到帖子的详细信息页面,但它不起作用


allnews.blade.php


@foreach ($posts as $post) // this is allnews.blade.php view

        <li>

            <div class="media wow fadeInDown">

               <a href="{{$post->slug}}" class="container"> <img width="100%" height="auto" alt="" 

               src="/storage/{{ $post->image}}"> </a>

              <div class="media-body"> <h3 src="" class="catg_title">{{$post->title}}</h3> </div>

            </div>

          </li>

        @endforeach

但是当我尝试转到我的帖子详细信息(通过使用 href $post->slug)时,我遇到了“404 页面未找到”问题。按照我的逻辑,一切看起来都很完美。但我无法路由。


这是我的PostController.php


 public function DetailofPost($id)

 {

   $PostDetails  = Post::where('slug' , $id)->first();

   return view('PostDetail', compact ('PostDetails'));

 }

这是我的PostDetail.blade.php视图


         @foreach($PostDetails as $PostDetail)

    

        <h1>{{PostDetail->title}}</h1>

        <div class="single_page_content"> <img class="img-center" src="/storage/{{ $PostDetail->image}}" alt="">

          <blockquote> {{PostDetail->body}}</blockquote>

         @endforeach    

这是我的路由页面,又名web.php


  Route::get('/', function () {

 return view('welcome');

                             });

 Route::get("/tumhaberler" , 'PostController@ListAll');


 Route::group(['prefix' => 'admin'], function () {

 Voyager::routes();

                                                 });

 Route::get('/{slug}', 'PostController@DetailofPost');


梦里花落0921
浏览 144回答 3
3回答

芜湖不芜

您将 slug 传递到 URL 中:<a href="{{$post->slug}}"但尝试使用 ID 在控制器中查找帖子:public function DetailofPost($id)如果你想始终使用 slug 作为标识符,你需要通过将你的路由更改为以下方式来告诉 Laravel:Route::get('/{post:slug}', 'PostController@DetailofPost');然后更改控制器功能以自动加载带有该 slug 的帖子:public function DetailofPost(App\Post $post)然后在控制器中,您不需要设置,$PostDetails因为您将拥有变量$post。这称为路由模型绑定。

梵蒂冈之花

您href应该包含完整的网址,而不仅仅是您的$post->slug.更改href为url("/{$post->slug}"),假设您想要的网址类似于http://yoursite.com/title-of-my-post请参阅文档: https:&nbsp;//laravel.com/docs/7.x/urls#introduction

白板的微信

&nbsp; &nbsp; &nbsp;@foreach($PostDetails as $PostDetail) //this is my detail page&nbsp; &nbsp; &nbsp;<h1>{{PostDetail->title}}</h1>&nbsp; &nbsp; <div class="single_page_content"> <img class="img-center" src="/storage/{{&nbsp;&nbsp; &nbsp; &nbsp;$PostDetail->image}}" alt="">&nbsp; &nbsp; &nbsp;<blockquote> {{PostDetail->body}}</blockquote>&nbsp; &nbsp; &nbsp;@endforeach&nbsp; &nbsp;&nbsp;我的逻辑是错误的。在我的控制器中,我将其设置为我的控制器从数据库中获取帖子的ID,而不是通过ID相关的数据库列(例如“slug”或“title”)在详细信息页面上填充它们,正如你们所看到的,不需要使用@foreach,这里是我从 PostDetail.blade.php 更新的代码&nbsp; &nbsp; &nbsp; &nbsp;<div class="single_page">&nbsp; &nbsp; &nbsp; &nbsp; <h1>{{$PostDetails->title}}</h1>&nbsp; &nbsp; &nbsp; &nbsp; <div class="single_page_content"> <img class="img-center" src="/storage/{{&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; $PostDetails->image}}" alt=""> </div>&nbsp; &nbsp; &nbsp; &nbsp; <a>&nbsp; {{$PostDetails->body}} </a>
随时随地看视频慕课网APP
我要回答