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

zkure5ic  于 2023-05-27  发布在  PHP
关注(0)|答案(1)|浏览(77)

我最近开始学习Laravel。在这样做的过程中,我已经开始从网络上完成教程,包括从youtube。在一个这样的教程中,我一直在开发一个非常基本的博客。我在研究鼻涕虫的时候遇到了一些僵局。出于某种原因,它就是不想为我工作!
当在我的'routes.php'文件中输入以下代码时,我注意到大括号'{'和'}'自动转换为URL编码,并显示单词“slug”。此外,单词posts后面的'/'无处可见。这意味着链接将读取为“http:[域名]/posts/%7Bslug%7D[文章名称]”

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

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

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

“slug”一词不再显示为URL的一部分。然而,由于某种原因,蛞蝓前面的'/'仍然不可见,好像被问题中的蛞蝓吃掉了!它现在是“http:[domain name]/posts**%7Bslug%7D**[article name]”。
如果有人能帮忙的话,我会很感激你给我指个方向。谢谢你。

ruarlubt

ruarlubt1#

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

@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 name 生成URL,请使用route。您的代码使用了action
1.要传递一个参数并填充“{slug}”,需要将一个数组作为第二个参数传递给route(以及action)。您的代码既没有传递数组,也没有将值传递到函数中。
1.您在Markdown::parse之后缺少},但这可能是复制和粘贴错误。

相关问题