Laravel“{slug}”没有被替换,而是被url编码

时间:2014-08-15 01:04:52

标签: php laravel slug

我最近开始学习Laravel。在这样做的过程中,我开始从网络上完成教程,包括来自youtube的教程。在一个这样的教程中,我一直在开发一个非常基础的博客。在使用slugs时,我遇到了一些僵局。出于某种原因,它只是不想为我工作!

当在我的'routes.php'文件中输入以下代码时,我注意到大括号'{'和'}'会自动转换为URL编码,并显示单词“slug”。此外,帖子一词后面的'/'无处可见。这意味着链接将显示为“http:[域名] /帖子/ %7Bslug%7D [文章名称]”

Route::get('/posts/{slug}', [
    'as' => 'post-show', 
    'uses' => 'PostController@getIndex'
]);

如果我更改代码,问题就会得到部分解决:

Route::get('/posts/{slug?}', [
    'as' => 'post-show', 
    'uses' => 'PostController@getIndex'
]);

“slug”一词不再显示为URL的一部分。然而,由于某种原因,前面的'/'仍然不可见,好像被有问题的slu吃掉了!它现在显示为“http:[域名] /帖子**%7Bslug%7D ** [文章名称]”。

如果有人能伸出援助之手,我真的很感激指向正确的方向。谢谢。

1 个答案:

答案 0 :(得分:0)

根据您的评论,您调用操作的方式不正确。试试这个观点代码:

@if ($posts->count())
  @foreach ($posts as $post)
    <article>
      <h2><a href="{{ route('post-show', ['slug' => $post->slug]) }}">{{ $post->title }}</a></h2>  
      {{ Markdown::parse(Str::limit($post->body, 157)) }}
      <a href="{{ route('post-show', ['slug' => $post->slug]) }}">read more&hellip;</a>
    </article>
  @endforeach
@endif

我不在附近测试这个,但它应该让你更接近。这段代码解决的问题是:

  1. 要使用路径名称生成网址,请使用route。您的代码使用的是action
  2. 要传递参数并填写“{slug}”,您将数组作为第二个参数传递给route(和action一样)。您的代码既没有传递数组也没有将值传递给函数。
  3. 您在}之后错过了Markdown::parse,但这可能是副本&amp;粘贴错误。
  4. 如果这有助于你,请记得投票并标记为已接受!