我创建了一个中间件,它可以根据我自己的逻辑识别客户.

因此,我将通过链将$REQUEST->客户变量传递给控制器.这可以很好地处理我的控制器中的"Lighminate\http\Request"请求.但是,如果我想创建一个具有特定请求的POST路由,如"OrderCreateRequest",则Customer属性不会到达.

中间件:

public function handle(Request $request, Closure $next): Response {
    $request->customer = /** geting customer */;

    $response = $next($request);

    return $response;
}

验证请求:

class OrderCreateRequest extends FormRequest {
    public Customer $customer;

    public function rules(): array {
        return [/** validation rules */];
    }
}

控制器:

class CheckoutController extends Controller {
    public function createOrder(OrderCreateRequest $request): RedirectResponse {
        dd($request->customer); // null
    }
}

实际上,在这种情况下,我试图在中间件中创建一个新的"OrderCreateRequest"请求,但我猜laravel在将其注入控制器之前创建了一个新的请求.(我判断了中间件和控制器中的SPL_OBJECT_HASH,两个散列不匹配.)我认为laravel没有克隆传入的请求、创建新的请求并复制属性,因此我的Customer属性已经消失.

我该怎么做呢?谢谢你提前给我答案!

如何传递变量的确切代码

推荐答案

不确定这是否仍然有效,但您过go 可以向这样的请求添加自定义属性:

$request->attributes->add(['customer' => /** customer instance */]);

$request->merge(['customer' => /** customer instance */]); // this was also possible iirc

从技术上讲,您应该能够在您的控制器中访问它,如下所示:

$request->get('customer');

$request->customer; // or like this

这与您现在所做的不同之处在于,这是(至少过go 是)一种受支持的传递变量的方式,这可能会使其正确传递.

Php相关问答推荐

编写WooCommerce多步骤签出

自定义WooCommerce帐户下载列表

Laravel集合块()方法

PHP中冒号的奇怪用例

在WooCommerce我的帐户部分添加带有自定义链接的自定义菜单项

PHP Laravel Web应用启动时间&>15秒

从目录文件夹中获取文件并追加到 Select 下拉列表(选项)-wordpress/wc

为什么只有最后一次点击的点赞/心形会按预期改变 colored颜色 ,而其他的保持正常 colored颜色 ?

如何使用定制的StateProvider设置JsonLd@上下文?

Azure应用程序无法访问共享文件夹

如何用十进制和字母数字减go 和添加 id

通过添加计数器修改文本区域表单中的重复值

PHP向API发送curl请求

如何在 php 中获取正确的时间

Laravel路由中的符号在slug中会创建额外的斜杠

仅在管理员新订单通知中显示WooCommerce订单商品自定义元数据

设置GA4 PHP API的setSubject以允许访问所有管理员账户属性

如何在构建 PHP 类别数组树的递归函数中将父面包屑传递给子项?

为 WordPress 页面创建新功能

PDO 和 SQL 查询结果中日期格式不同的原因可能是什么?