Laravel 4:我可以告诉哪条路线正在调用控制器功能吗?

时间:2014-11-20 07:52:42

标签: php laravel laravel-4

我有一组含有两组路线的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)

2 个答案:

答案 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/loginadmin/login

答案 1 :(得分:1)

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

public function login($from) {

}

以这种方式定义apiLoginadminLogin函数:

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

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

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