Laravel - 从自定义类重定向

时间:2014-02-06 02:50:54

标签: php architecture laravel-4

如何将应用程序从我的自定义类重定向到特定网址?

假设我在Laravel应用程序中有自定义类API:

class API {

    private function generic_request( $uri ) 
    {
       $response = $this->getResponse($uri);
       if($response == 'bad_token') 
       {
          //redirect to login screen with message
       }
    }

在我的控制器功能中:

public function add_employee() {
    $data['employee_positions'] = API::generic_request('/employees/position_list');
    $this->layout->content = View::make('employees.add_employee')->with($data);
}

我已尝试Events,但您无法从Event侦听器重定向。现在我正在使用Exceptions,但我觉得这是错误的做法。例如:

App::abort(401);

然后在global.php

App::error(function(Exception $exception, $code)
{
    /*CORE API Exceptions*/

    if($code == 401) 
    {
        Session::put('message','System Action: Expired Token');
        return Redirect::to('login');
    }
}

2 个答案:

答案 0 :(得分:0)

您只需创建一个响应并将其一直返回Laravel:

<?php

class API {

    public function doWhatever($uri)
    {
        return $this->generic_request($uri);
    }

    private function generic_request( $uri ) 
    {
       $response = $this->getResponse($uri);

       if($response == 'bad_token') 
       {
          return Redirect::to('login')->with('message', 'your message');
       }

    }

}

Route::get('test', function()
{
    return with(new API)->doWhatever('yourURI');
});

答案 1 :(得分:0)

使用Laravel 5.7,您可以使用@casft最初提到的内容-

abort(redirect('login')->with('alert-warning', 'Your session token has expired. Please login to continue.'));

当您不使用laravel传统Auth并依赖于承载令牌进行身份验证时,此外,您还想防止公共功能出现代码臭味,那么您可以使用此便捷功能过滤401 http响应调用。可能不是最佳或优雅的解决方案,但可以完成工作。