gpt4 book ai didi

php - 拉维尔 5 : Call method in class before the method indicated by the route

转载 作者:行者123 更新时间:2023-12-05 03:13:11 25 4
gpt4 key购买 nike

我确信在 Laravel 中有一个详细记录的方法来执行此操作,我只是错过了它或者不理解我正在阅读的内容。我有一个应用程序使用 token 访问部分网站,而不是用户名或密码。该 token 标识作业,检查作业的状态,然后将用户重定向到适当的页面。

到目前为止,这是我在 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 检查工作的阶段并将他们重定向到正确的 URL(当前 /first-steps 用于第 1 阶段,/designs 用于第 2 阶段)。问题是,如果用户为页面添加书签,例如 /first-steps,当项目进入第 2 阶段时,用户仍然可以访问第 1 阶段的页面。我希望能够有一种方法在路由指示的方法之前运行,以确保他们正在访问作业所在阶段的正确 URL,必要时重定向,然后将作业( Eloquent 对象)存储在类(或将其注入(inject)到调用的方法中)。

我尝试在 Controller 中创建一个 before 方法,但它没有被调用:

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

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

public function handle($request, Closure $next)
{
if ( ! Website::where('access_token', '=', $request->route()->parameter('token'))->count())
{
return response('Invalid token.', 401);
}
return $next($request);
}

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

最佳答案

中间件可能是一种选择。

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

例如

class BaseController extends Controller {

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

关于php - 拉维尔 5 : Call method in class before the method indicated by the route,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30904067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com