我有一个包含 2 组路线的 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')
有没有办法知道从哪里调用控制器函数?(最好不要解析网址)
您可以在控制器中检查路由。(我不是说这是解决您问题的最佳解决方案,但您可以)
最好的方法是命名您的路线。拉拉维尔文档
Route::post('/login', ['as' => 'apiLogin', 'uses' => 'AuthenticationController@apiLogin']);
Route::post('/login', ['as' => 'adminLogin', 'uses' => 'AuthenticationController@adminLogin']);
然后你只是做
Route::currentRouteName();
如果由于某种原因您无法命名路由,您仍然可以获取路由的路径(这不是完整的 url,而是路由中定义的段。 包括组)
所以Route::getCurrentRoute()->getPath()
应该返回api/login
或admin/login
您可以在控制器中检查URL,但在这种情况下,更好的解决方案可能是保持路由原样,使用参数创建登录方法:
public function login($from) {
}
并通过以下方式定义apiLogin
和adminLogin
函数:
public function apiLogin() {
return $this->login('api');
}
public function adminLogin() {
return $this->login('admin');
}
这样,如果您将来决定更改代码,您将仅更改这些方法的代码,而不更改路由。