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

我遇到的问题是,在将数据返回到视图本身之前,我在中间件和控制器中复制了相同的数据库查询.

以下是设置的示例;

--路由.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);
    }

--页面控制器.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()在中间件和控制器中都是重复的.我需要把数据从一个传递到另一个,这样才不会重复.

推荐答案

我认为正确的方法(在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相关问答推荐

发送给WooCommerce中相关产品作者的通知新订单的邮箱

Laravel 11 api资源PUT请求模型没有查询结果

在Laravel中输出SON时如何将透视表列移动到集合?

如何使用PHP停止foreach循环中的重复项?

msgraph-sdk-php v2如何传递skiptoken到request?

保存PHP条带以备将来使用,不显示用户界面

如果WooCommerce中存在特定的运输方式,则隐藏其他运输方式

让所有具有相同名称的产品在WooCommerce中更改价格

将一个情态形式放在细丝v3中的形式中间

在WordPress中从CPT中删除插件

如何将WooCommerce产品从一个产品复制到另一个产品S

用GUZLE模拟Read_Timeout

登录后重定向在WooCommerce中购买产品的用户

获取作者';在WordPress中使用PHP

如何在laravel中获得两个时间戳之间的小时和分钟差异

如何更新 Laravel Eloquent 列强制转换为集合

获取 Shopware 6 集合元素的值,PHP

根据所选付款方式启用/禁用 WooCommerce 所需的 checkout 字段

在 Botiga 主题模板中添加复选框到政策行.Woocommerce

为什么在解压缩具有混合字符串和 int 键的关联数组时出现错误消息无法使用位置参数...?