Laravel 5:在路由指示的方法之前调用类中的方法

时间:2015-06-17 23:18:04

标签: php laravel laravel-5 laravel-middleware

我确信在Laravel中有一个记录良好的方法,我只是错过了它或者不理解我在读什么。我有一个应用程序使用令牌访问网站的一部分,而不是用户名或密码。该令牌标识作业,检查作业的状态,然后将用户重定向到适当的页面。

到目前为止,这是我在routes.php文件中的内容:

$router->pattern('token', '[A-Za-z0-9]{32}');
$router->pattern('id', '[0-9]{1,11}');

Route::group(['prefix' => '{token}', 'middleware' => 'token'], function()
{
    Route::get('/', 'RedirectController@index');
    Route::get('/first-steps', ['as' => 'firstSteps', 'uses' => 'FirstStepsController@index']);
    Route::get('/first-steps/form', ['as' => 'firstStepsForm', 'uses' => 'FirstStepsController@form']);
    Route::post('/first-steps/form', 'FirstStepsController@processForm');
    Route::get('/designs', ['as' => 'designs', 'uses' => 'DesignsController@index']);
    Route::get('/designs/{id}', ['as' => 'designShow', 'users' => 'DesignsController@show']);
});

还有一些其他路线无关紧要。这一切都很有效,如果用户访问我们提供的链接,则RedirectController@index会检查作业的阶段并将其重定向到正确的网址(目前{1}}用于第1阶段,/first-steps用于阶段2)。问题是如果用户为某个页面添加了书签,例如/designs,当项目进入第2阶段时,用户仍然可以访问第1阶段页面。我希望能够在路由所指示的方法之前运行一个方法,以确保它们正在访问作业所在阶段的正确URL,必要时重定向然后将作业(一个雄辩的对象)存储在类(或将其注入到被调用的方法中)。

我尝试在控制器中创建/first-steps方法,但它没有被调用:

before

正如您在路由器中看到的,我有一个验证令牌的自定义中间件。这是该中间件的代码:

public function before(Request $request, $token)
{
    $this->website = Website::where('access_token', '=', $token)->firstOrFail();
}

我有一种感觉,我可以使用这个中间件来实现我需要做的事情,但我不确定如何继续,或者即使我走在正确的轨道上。有人可以解释我需要用什么来达到我的要求吗?

1 个答案:

答案 0 :(得分:2)

中间件可能是一种选择。

或者你可以在BaseController的构造函数中执行此操作吗?

E.g。

class BaseController extends Controller {

    public function __construct()
    {
         //if token in query string
         //load Job and check status Vs requested URL
         //redirect to correct URL
    }
}