我正在建立一个类似Twitter的网站,但路由遇到问题:
Route::get('/profile/{id}', 'ProfileController@show')->name('profile.show');
Route::get('/profile/{username}', 'ProfileController@show')->name('profile.show');
Route::get('/profile/{email}', 'ProfileController@show')->name('profile.show');
我的意思是所有这三个URL将向用户显示同一页面:
example.com/profile/1
example.com/profile/rahimi0151
example.com/profile/rahimi0151@gmail.com
我的问题是: 有没有办法合并所有这些路线?如下所示:
Route::get('/profile/{id|username|email}', 'ProfileController@show')->name('profile.show');
答案 0 :(得分:1)
我不确定要合并路线,但是可以这样写路线
Route::get('/profile/{identifier}', 'ProfileController@show')->name('profile.show');
然后将show
中ProfileController
的方法签名更改为类似的
public function show($identifier) {
if (is_numeric($identifier)) {
// do something
} else if ($this->isEmail($identifier)) {
// do something
} else {
// assume it is a username, and do something with that
}
}
// method to check if value provided is an email
// preferably, move this to a file of your custom helper functions
private function isEmail($value) {
// check if value is an email
// and return true/false indicating whether value is an email
}
这是link的一个很好的方法,用于检查值是否为有效的电子邮件地址