Laravel 自定义固定链接

Laravel custom permalink

我正在尝试更改文章页面的 url,因此我不想显示文章 ID,而是想显示文章标题。

目前URL如下; https://www.example.com/posts/post/32 其中 32 只是一个随机的文章 ID。

相反,我喜欢它显示如下; https://www.example.com/posts/post/my-amazing-article

现在我查看了 laravel 文档和 Whosebug 上的不同帖子并尝试了很多东西,但我显然在某个地方犯了一个错误,因为似乎没有任何效果所以我几乎回到了我开始的地方.

Blade

<a href="{{ route('post', $a->id) }}" class="feature-box-01 media" id="smallbox"></a>          

路线

Route::get('/posts/post/{id}', [App\Http\Controllers\WelcomeController::class, 'post'])->name('post');

控制器

public function post(request $request){
    $id = $request->id;
    $article = Tinymce::find($id);

    return view('/post')->with('articles, $articles');
}

现在保存在 Tinymce 中的文章实际上是在子域的不同控制器上创建的。

public function tinymce(Request $request)
    {
        
        if(request()->ajax())
        {   
            if($request->article_id == null)
            {
                $tinymce = new Tinymce;
                
                
            }else{

                $tinymce = Tinymce::find($request->article_id);
            }
            
            $tinymce->description = $request->description;
            $tinymce->content = $request->myContent;
            $tinymce->title = $request->title;
            $tinymce->author = $request->author;
            $tinymce->publish = $request->publish;
            $title = $tinymce->title;
            $slug = Str::slug($title, "-");
            $tinymce->slug = $slug;            
            $tinymce->save();

            
            return $tinymce->id;
        }
        
    }

如您所见,当我在某个地方读到这是使用自定义的方式时,我已经将标题变成了一个 slug url,但我并没有深入了解它。

非常感谢任何帮助,谢谢。

解释:

首先,正如您所说,您将 slug 存储到数据库中。所以,那很好。

ControllerView,您可以将 slug 放入 post 对象中。

Blade View :(你必须在路线 url 中通过 slug

<a href="{{ route('post', $a->slug) }}" class="feature-box-01 media" id="smallbox"></a>          

路线:(idslug

Route::get('/posts/post/{slug}', [App\Http\Controllers\WelcomeController::class, 'post'])->name('post');

控制器:(现在你可以从第二个参数得到slug

public function post(request $request, $slug = ''){
    $article = Tinymce::where('slug', $slug)->first();

    return view('/post', compact('article'));
}

现在,您可以使用 slug 访问自定义 URL。

希望对你有帮助。 @assiemp