代码之家  ›  专栏  ›  技术社区  ›  Andy Brown

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

  •  1
  • Andy Brown  · 技术社区  · 10 年前

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

    当在“routes.php”文件中输入以下代码时,我注意到大括号“{”和“}”会自动转换为URL编码,并显示单词“slug”。此外,单词posts后面的“/”在任何地方都看不到。这意味着链接将读为“http:[domainname]/posts”/ %7段%7D [文章名称]“

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

    如果我这样更改代码,问题部分解决:

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

    单词“slug”不再显示为URL的一部分。然而,由于某种原因,蛞蝓前面的“/”仍然不可见,好像被正在讨论的蛞蝓吃掉了一样!它现在显示为“http:[域名]/posts**%7Bslug%7D**[文章名称]”。

    如果有人能帮忙的话,我真的很感激你指出正确的方向。非常感谢。

    1 回复  |  直到 10 年前
        1
  •  0
  •   bishop    10 年前

    根据您的评论,您调用操作的方式不正确。尝试此视图代码:

    @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. 使用路由生成URL 名称 使用 route 。您的代码正在使用 action .
    2. 要传递参数并填充“{slug}”,请将数组作为第二个参数传递给 路线 (和 行动 因此)。您的代码既没有传递数组,也没有将值传递到函数中。
    3. 你错过了 } 之后 Markdown::parse ,但这可能是一份副本&粘贴错误。

    如果这对你有帮助,记得投票并标记为接受!