如何在Laravel 5.2路由中用where约束status参数为指定值?
解决Laravel 5.2路由中限制status参数为特定值的问题
嘿,这个需求很容易实现,有两种简洁的方式可以满足你的要求,咱们一个个来看:
方法1:使用正则表达式精确匹配
你只需要把原来where数组里的status规则改成匹配activate或deactivate的正则分支即可。为了确保参数完全匹配(避免出现类似activatexxx这种不符合的情况),可以加上^和$来限定字符串的首尾:
Route::any('/set-status/{id}/{status}', [ 'as'=>'admin_service_category_set_status', 'uses'=>'Admin\ServiceCategoryController@set_status' ])->where([ 'id'=> '[0-9]+', 'status' => '^(activate|deactivate)$' ]);
方法2:使用whereIn快捷方法(更直观)
Laravel还提供了whereIn方法,不用写正则就能直接指定允许的参数值,代码可读性更高:
Route::any('/set-status/{id}/{status}', [ 'as'=>'admin_service_category_set_status', 'uses'=>'Admin\ServiceCategoryController@set_status' ])->where('id', '[0-9]+') ->whereIn('status', ['activate', 'deactivate']);
两种方法都能达到你的目的:只有当status参数是activate或者deactivate时,路由才会匹配成功,否则会返回404错误。个人更推荐第二种方法,因为不用写正则,代码更清晰易懂~
内容的提问来源于stack exchange,提问作者Saswat
相关产品推荐
相关产品推荐

