【问题标题】:Laravel 4: Can I tell which route is calling the controller function?Laravel 4:我可以知道哪个路由正在调用控制器功能吗?
【发布时间】:2014-11-20 07:52:41
【问题描述】:

我有一个包含 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')

有什么方法可以告诉我从哪里调用控制器函数? (最好不解析网址)

【问题讨论】:

  • 我不知道在 laravel 中这样做的方法,但为了防止代码重复,我采取了不同的方法。让您的 API 控制器处理所有登录逻辑,并从您的直接登录控制器简单地调用您的 API 登录。
  • 谢谢@JonathanCrowe,如果没有任何其他答案可以提供更好的解决方案,我将采用这种方法。

标签: php laravel laravel-4


【解决方案1】:

您可以在控制器中检查路线。 (我并不是说这是解决您问题的最佳解决方案,但您可以)

最好的方法是命名你的路线。 Laravel Docs

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

【讨论】:

    【解决方案2】:

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

    public function login($from) {
    
    }
    

    并以这种方式定义 apiLoginadminLogin 函数:

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

    这样,如果您将来决定更改代码,您将只更改那些方法的代码,而保留路由而不作任何更改。

    【讨论】:

      猜你喜欢
      • 2018-01-09
      • 2021-09-06
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多