【问题标题】:Laravel getRouteKeyName replace white space to dashLaravel getRouteKeyName 将空格替换为破折号
【发布时间】:2020-03-22 21:51:09
【问题描述】:

我寻找的 url 变成了 127.0.0.1:8000/news/some-article-title。使用 Laravel 5.8

当前显示 127.0.0.1:8000/news/some%20article%20title。

我尝试了几种方法...

第一 阅读 laravel 文档,我发现在 url 后面显示标题而不是 id。

public function getRouteKeyName()
{
  return 'title';
}

第二 app/Providers/RouteServiceProvider

public function boot()
{
  parent::boot();

  Route::bind('news', function($value){
     return  \App\Models\News::where('title', str_replace('-', ' ', $value))->first();
  })
}

没用。网址仍然是 %20 而不是破折号

我错过了什么重要的事情吗?

【问题讨论】:

    标签: laravel routes


    【解决方案1】:

    你需要像这样进行反向操作:

     <a href="{{str_replace(' ','-',$new->title)}}"> {{$new->title}}</a>
    
    
     Route::bind('news', function($value){
         return  \App\Models\News::where('title', str_replace(' ', '-', $value))->first();
      })
    

    或者您需要创建特定的列,例如 slug,它具有相同的 title 值但没有空格

    【讨论】:

    • 我使用您提供的第一个解决方案。它链接到 404...网址被替换为破折号。但是路线不对。解决方案 2(slug)是在数据库中再创建一列吗?
    • 是的,只需创建名为slug 的列,当您保存它时,您需要像这样保存它str_slug($new-&gt;title) 并在刀片文件中使它像这样&lt;a href="{{url('/'.$new-&gt;slug)}}"&gt; {{$new-&gt;title}}&lt;/a&gt;
    • 在您的模型中public function getRouteKeyName() { return 'slug'; }
    • 在您的RouteServiceProvider中的评论路由绑定之后
    • \App\Models\News::where('title', str_replace(' ', '-', $value))->first();为什么它使用 where 方法来获取集合?我很不明白这个=(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    相关资源
    最近更新 更多