Php Laravel-从自定义类重定向

Php Laravel-从自定义类重定向,php,architecture,laravel-4,Php,Architecture,Laravel 4,如何将应用程序从自定义类重定向到特定url 假设我在Laravel应用程序中有自定义类API: class API { private function generic_request( $uri ) { $response = $this->getResponse($uri); if($response == 'bad_token') { //redirect to login screen with m

如何将应用程序从自定义类重定向到特定url

假设我在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);
}
我尝试了
事件
,但您无法从
事件
侦听器重定向。现在我使用的是
异常
,但我觉得这是一种错误的方法。例如:

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');
    }
}

您只需创建一个响应并将其返回到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');
});

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

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

当您不使用laravel传统身份验证并依赖承载令牌进行身份验证时,而且您希望防止公共函数出现代码气味,那么您可以使用此方便的函数过滤401 http响应调用。可能不是最好或优雅的解决方案,但可以完成任务。

如果在我的
控制器中调用API会怎么样:
$data['employee_positions']=API::generic_request('/employees/position_list')$此->布局->内容=视图::make('employees.add_employees')->带有($data)?通过您的示例,我将只看到json响应。我想知道是否有一种通用的方法来代替将每个请求包装为私有的非静态方法上的
if
语句?API不应该执行重定向,只返回对请求的响应!消费者应根据收到的回复做出决定。我只想在响应标题中返回状态代码,并在正文中添加一些json来解释这种情况。他的评论说,
//重定向到带有消息的登录屏幕
,这在我看来不像API工作流,也许这只是一个名称不正确的类,但我不是来这里讨论架构的,这是一个主要基于观点的答案,应该向程序员指出:。我有两个Laravel实例,它们作为服务器客户端相互通信。这是一个从服务器实例接收响应的API客户机类示例。