You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 10如何将搜索结果URL改为SEO友好的Slug格式?

解决Laravel搜索URL转SEO友好Slug格式的方案

一、新增SEO友好的Slug路由

首先添加带词汇slug的GET路由,用来展示选中词汇的详情页:

// 新增:通过slug展示词汇详情的路由(路由模型绑定自动获取实例)
Route::get('/admin/word-to-review/{word:slug}', 'ReviewWordController@show')->name('admin.words.review');

// 保留原有路由,用于接收搜索参数并重定向
Route::get('/modification/un-terme/choisir','choose_one')->name('choose_one');
Route::get('/modification/un-terme/autocomplete','autocomplete')->name('autocomplete');
Route::get('/modification/un-terme/revoir','review_one')->name('review_one');

// 调整POST更新路由为Slug格式(可选,更规范)
Route::post('/admin/word-to-review/{word:slug}', 'ReviewWordController@update')->name('admin.words.update');

注:{word:slug}是路由模型绑定,要求你的词汇模型(比如Word)有slug字段,Laravel会自动根据slug查询对应模型实例。

二、修改review_one方法实现重定向

原来的review_one是接收GET搜索参数的方法,现在改为找到对应词汇后重定向到Slug路由:

public function review_one(Request $request)
{
    // 验证搜索参数(根据你的实际搜索字段调整,比如是关键词还是ID)
    $request->validate([
        'search' => 'required|string', // 假设搜索框name是search
    ]);

    // 根据搜索参数查询对应的词汇记录
    $word = Word::where('name', $request->input('search'))->firstOrFail();
    // 如果是通过ID传递,改为:Word::findOrFail($request->input('word_id'));

    // 重定向到Slug路由,传递slug作为参数
    return redirect()->route('admin.words.review', ['word' => $word->slug]);
}

三、实现Slug路由的详情展示方法

在ReviewWordController中添加show方法,通过路由模型绑定直接获取词汇实例并传递到视图:

public function show(Word $word)
{
    // 直接将词汇数据传递到show视图
    return view('admin.words.review', compact('word'));
}

此时视图中可以直接使用$word变量调用词汇的所有字段(比如$word->name、$word->content等)。

四、关于重定向语法的说明

你提到的类似redirect('admin.words.review')->with($searched_word_data)的写法,正确的语法是:

  1. 用route()方法指定路由名称,并传递路由参数
  2. 如果需要携带临时会话数据(比如提示信息),再用with()方法

示例:

// 仅重定向到Slug路由
return redirect()->route('admin.words.review', ['word' => $word->slug]);

// 重定向并携带提示信息
return redirect()->route('admin.words.review', ['word' => $word->slug])
                 ->with('success', '已成功加载词汇详情');

临时数据可以在视图中通过session('success')获取。

五、调整表单提交路由(可选)

如果后续要实现更新功能,表单的action要指向新的POST路由:

<form action="{{ route('admin.words.update', ['word' => $word->slug]) }}" method="POST">
    @csrf
    <!-- 你的表单输入字段 -->
    <button type="submit">更新词汇</button>
</form>

内容的提问来源于stack exchange,提问作者user2955335

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 11:38:11