Laravel 4:我能分辨出哪条路由在调用控制器函数吗?


Laravel 4: Can I tell which route is calling the controller function?

我有一个包含 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/loginadmin/login

您可以在控制器中检查URL,但在这种情况下,更好的解决方案可能是保持路由原样,使用参数创建登录方法:

public function login($from) {
}

并通过以下方式定义apiLoginadminLogin函数:

public function apiLogin() {
   return $this->login('api');
}
public function adminLogin() {
   return $this->login('admin');
}

这样,如果您将来决定更改代码,您将仅更改这些方法的代码,而不更改路由。