我创建了一个中间件,它可以根据我自己的逻辑识别客户.
因此,我将通过链将$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属性已经消失.
我该怎么做呢?谢谢你提前给我答案!
如何传递变量的确切代码