то, что вы делаете, поместит вас в бесконечный цикл: (
, потому что вы не меняете маршрут.
Если я хочу это сделать, я создам новый запрос, затем добавьтеданные к нему
, которые вы должны добавить \ before Illuminate ...
$kernel = app()->make(\Illuminate\Contracts\Http\Kernel::class);
... и внутри своего цикла:
//$newReq = $request->duplicate(null,$subReq);
$newReq = Request::create($subReq['route'], 'POST', $subReq['data']);
$subRes = $kernel->handle($newReq);
$subRes->send();
наконец, вы не должны забыватьcsrf, поскольку вы отправляете почтовый запрос, вам нужно исключить маршруты subReq из csrf или отправить токен с запросом,
, кроме которого вы можете:
app/Http/Middleware/VerifyCsrfToken.php
или вы можете:
- Элемент списка
- дублировать запрос. Проверьте это: метод дублирования
- получить сервер запросов
- измените его на то, что вам нужно
- , затем инициализируйте новый запрос с новыми параметрами
- , затем отправьте маршрут с новым запросом: D
код:
$subReq = [
"route" => "survey",
"data" => [
"companyId" => 3,
'_token' => csrf_token(), // if you dont want to except csrf
],
];
$server = $request->server();
$server['REQUEST_METHOD'] = 'POST'; // add it if you are initially sending a GET,
$server['REQUEST_URI'] = $subReq['route'];
$newRequest = $request->duplicate(null, $subReq['data'], null, null, null, $server);
$newRequest->initialize([], $subReq['data'], [], $request->cookie(), [], $server, null);
app()->instance('request', $newRequest);
\Route::dispatch($newRequest);
// or you can still do this
// $kernel = app()->make(\Illuminate\Contracts\Http\Kernel::class);
// $subRes = $kernel->handle($newRequest);
// $subRes->send();
теперь, если вы изначально отправляете запрос POST, вам не нужно добавлять тип метода post в SERVER, но если нет, вам нужно добавить его, и вы должны исключить csrf или добавить его к атрибутам
Кстати, вы все равно можете сделать в конце:
$kernel = app()->make(\Illuminate\Contracts\Http\Kernel::class);
$subRes = $kernel->handle($newRequest);
$subRes->send();