我有一组含有两组路线的laravel应用程序:
Route::group(array('prefix' => 'api'), function()
{
Route::post('/login', ['uses' => 'AuthenticationController@apiLogin']);
}
Route::group(array('prefix' => 'admin'), function()
{
Route::post('/login', ['uses' => 'AuthenticationController@adminLogin']);
}
为了节省时间并防止编写双重代码,我希望将apiLogin()
和adminLogin()
函数压缩为一个函数:login()
。我也想根据调用函数的路径返回不同的东西。
如果请求来自/api/login
,我想返回Response::json($apiResponse)
。如果请求即将到来/admin/login
,我想返回Redirect::('route.to.redirect.to')
有没有办法可以告诉调用控制器功能的位置? (最好不解析URL)
答案 0 :(得分:3)
您可以检查控制器中的路线。 (我不是说这是你问题的最佳解决方案,但你可以)
执行此操作的最佳方法是命名您的路线。 Laravel Docs
Route::post('/login', ['as' => 'apiLogin', 'uses' => 'AuthenticationController@apiLogin']);
Route::post('/login', ['as' => 'adminLogin', 'uses' => 'AuthenticationController@adminLogin']);
然后你就做了
Route::currentRouteName();
如果由于某种原因您无法命名路线,您仍然可以获得路线的路径(这不是完整的路径,而是路线中定义的路段。包括在内的路段)
因此Route::getCurrentRoute()->getPath()
应返回api/login
或admin/login
答案 1 :(得分:1)
您可以检查控制器中的URL,但在这种情况下更好的解决方案可能是保留路由,使用参数创建登录方法:
public function login($from) {
}
以这种方式定义apiLogin
和adminLogin
函数:
public function apiLogin() {
return $this->login('api');
}
public function adminLogin() {
return $this->login('admin');
}
这样,如果您将来决定更改代码,您将只更改这些方法的代码,而不会更改路由。