Laravel创建了一个带有slug和id的路线

时间:2018-06-12 09:44:55

标签: php laravel

此时我有

Route::get('properties/{id}', 'InfoController@show');

该链接看起来像mydoamin.com/properties/1

是否有可能创建一条拥有properties/id/slug(from title)的路线?

4 个答案:

答案 0 :(得分:4)

是的,您可以通过执行以下操作来实现此目的:

更新您的路线:

Route::get('properties/{id}/{slug}', 'InfoController@show');

然后接受控制器中的路线并检查是否存在具有给定idslug的有效模型。

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');

您将匹配所有非全数字子弹,但将整数传递给常规路由。