gpt4 book ai didi

php - Laravel 中间件将变量返回给 Controller

转载 作者:IT老高 更新时间:2023-10-28 12:00:33 26 4
gpt4 key购买 nike

我正在对用户进行权限检查,以确定他们是否可以查看页面。这涉及首先通过一些中间件传递请求。

我遇到的问题是在将数据返回到 View 本身之前,我在中间件和 Controller 中复制了相同的数据库查询。

这是一个设置示例;

--routes.php

Route::get('pages/{id}', [
'as' => 'pages',
'middleware' => 'pageUser'
'uses' => 'PagesController@view'
]);

-- PageUserMiddleware.php(PageUserMiddleware 类)

public function handle($request, Closure $next)
{
//get the page
$pageId = $request->route('id');
//find the page with users
$page = Page::with('users')->where('id', $pageId)->first();
//check if the logged in user exists for the page
if(!$page->users()->wherePivot('user_id', Auth::user()->id)->exists()) {
//redirect them if they don't exist
return redirect()->route('redirectRoute');
}
return $next($request);
}

-- PagesController.php

public function view($id)
{
$page = Page::with('users')->where('id', $id)->first();
return view('pages.view', ['page' => $page]);
}

如你所见,Page::with('users')->where('id', $id)->first() 在中间件和 Controller 中都是重复的。我需要将数据从一个传递到另一个,以免重复。

最佳答案

我相信正确的方法(在 Laravel 5.x 中)是将您的自定义字段添加到 attributes 属性。

从源码注释可以看出,属性是用于自定义参数的:

 /**
* Custom parameters.
*
* @var \Symfony\Component\HttpFoundation\ParameterBag
*
* @api
*/
public $attributes;

所以你可以按如下方式实现它;

$request->attributes->add(['myAttribute' => 'myValue']);

然后您可以通过调用来检索属性:

\Request::get('myAttribute');

或者来自 laravel 5.5+ 中的请求对象

 $request->get('myAttribute');

关于php - Laravel 中间件将变量返回给 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30212390/

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