此时我有
Route::get('properties/{id}', 'InfoController@show');
该链接看起来像mydoamin.com/properties/1
是否有可能创建一条拥有properties/id/slug(from title)
的路线?
答案 0 :(得分:4)
是的,您可以通过执行以下操作来实现此目的:
更新您的路线:
Route::get('properties/{id}/{slug}', 'InfoController@show');
然后接受控制器中的路线并检查是否存在具有给定id
和slug
的有效模型。
public function show($id, $slug) {
$model = Model::where('id', $id)
->where('slug', $slug)
->first();
if(! $model) {
// handle error here
}
return view('show', compact('model'));
}
(请注意,验证也可以通过创建自定义表单请求来完成:https://laravel.com/docs/5.6/validation#form-request-validation)
答案 1 :(得分:1)
Route::get('properties/{id}/{title}', 'InfoController@show');
关于show function
public function show ($id, $title) {
我希望这会对你有所帮助
答案 2 :(得分:0)
您可以修改Route::get('properties/{id}/{slug}', 'InfoController@show');
检查slug是否与标题匹配必须放在控制器中。
答案 3 :(得分:0)
将此添加到您的ModelController中(带有一个子字段和常规的CRUD show函数)
public function slug($slug) { return $this->show(Model::where('slug', $slug)->firstOrFail()); }
将此路由添加到web.php(以匹配所有不包含'/'的非全数字子弹
Route::get ('model/{slug}', 'ModelController@slug')->where(['slug' => '^(?!((.*/)|(create$))).*\D+.*$']);
确保它早于
Route::resource('model', 'ModelController');
您将匹配所有非全数字子弹,但将整数传递给常规路由。