我在laravel路线中检测到一个接收3个参数但参数可能为/
的问题。例如:在此路线中:Route::get('/checkSerial/{brand}/{model}/{serie}', 'CORController@checkSerial')
如果品牌价值是这样的:irc / 12234它将假设存在4个参数而不是。
我签入文档以这种方式处理Route::get('/checkSerial/{brand}/{model}/{serie}', 'CORController@checkSerial')->where(['brand' => '[/]+', 'model' => '[/]+', 'serie' => '[/]+']);
但不起作用。
我该如何解决这个问题?
答案 0 :(得分:2)
您想要的正则表达式为[a-zA-Z0-9\-\/]+
在仅使用where
的{{1}}子句中,您告诉laravel您的参数只是[\]+
的组合。
因此,您需要组合使用\
个数字a-zA-Z
和0-9
。
我还不确定laravel是否可以使用\
解析通配符。试试吧!!!
答案 1 :(得分:1)
你的正则表达式错了。
使用:
Route::get('/checkSerial/{brand}/{model}/{serie}','CORController@checkSerial')
->where(['brand' => "[\w\/]+"]);
这意味着该品牌可以使用单词字符和斜杠。
但是如果您的模型和系列也需要支持斜线,那么您就遇到了问题。考虑:
checkSerial/irc/12234/12/3/5
以下所有工作:
brand = irc / 12234 model = 12/3 serie = 5
brand = irc model = 12234/12 serie = 3/5
brand = irc / 12234 model = 12 serie = 3/5
等等,所以要非常小心你如何定义它。