Laravel如何将URL末尾的id拼接至slug字段 移除URL末尾单独id参数
#Laravel URL结构调整方案(将ID拼接至slug段末尾)
1. 修改路由定义(routes/web.php)
替换原有路由规则,调整参数数量并添加正则约束,确保可以正确匹配「slug+ID」的拼接段:
Route::get('{property_purpose}/{slug_and_id}', 'PropertiesController@single_properties') ->where('slug_and_id', '.*-\d+$');
上述正则规则会约束第二个路径段的格式必须为「任意字符+短横线+纯数字结尾」,避免匹配到不符合规则的路径。
2. 调整控制器参数逻辑
修改控制器方法的入参,新增拆分逻辑提取slug和ID,原有业务逻辑无需改动:
public function single_properties(Request $request, $property_purpose, $slug_and_id) { // 拆分拼接段得到slug和ID preg_match('/(.+)-(\d+)$/', $slug_and_id, $matches); $slug = $matches[1]; $id = $matches[2]; // 原有业务代码保持不变,继续使用$property_purpose、$slug、$id处理即可 }
3. 修改Blade模板的URL生成规则
生成URL时将ID拼接到slug末尾即可:
{{ url(strtolower($property->property_purpose).'/'.$property->property_slug.'-'.$property->id) }}
注意事项
- 若你的业务中slug本身可能以
-数字格式结尾,可调整拼接规则使用唯一分隔符(如--)拼接slug和ID,同步修改路由正则和控制器的拆分规则即可。
内容的提问来源于stack exchange,提问作者Umar Waqar
相关产品推荐
相关产品推荐

