Я новичок в ларавеле. Я пытаюсь передать параметр из промежуточного программного обеспечения от контроллера следующим образом:
if (isset($_COOKIE['name']))
{
return $next($request->attributes->add(['name' => strval($_COOKIE['name'])]));
}
Однако я получил это сообщение об ошибке:
"Type error: Argument 1 passed to Symfony\Component\HttpFoundation\Response::prepare() must be an instance of Symfony\Component\HttpFoundation\Request, null given"
Я попытался преобразовать значение файла cookie в строку перед его передачей, но это не сработало. Как передать файл cookie в качестве параметра? Я не хочу получать значение cookie с помощью $_COOKIE['name']. Моя версия laravel - 5.5. Спасибо!






Попробуйте объединить значение cookie с вводом запроса:
$merged = $request->merge(['name' => $request->cookie('name')]);
return $next($merged);
Имейте в виду, что это перезапишет любые входные значения с именем name, поэтому используйте уникальный ключ.
Однако на самом деле в этом нет необходимости, поскольку запрос имеет доступ к cookie на протяжении всего жизненного цикла:
// MyController or MyModel or MyServiceProvider...
if (request()->hasCookie('name')) {
$cookie = request()->cookie('name');
// do stuff with cookie
}
В функции вашего контроллера используйте request()->cookie('name')->getValue();. Документы о файлах cookie
Как насчет того, чтобы использовать merge () для передачи параметров, не являющихся файлами cookie? В моей программе есть два случая (может прочитать файл cookie / не может прочитать файл cookie). Если файл cookie может быть прочитан, файл cookie будет передан контроллеру. В другом случае передайте контроллеру другое значение, в то время как имя параметра такое же, как в первом случае.
Если вы используете merge, он доступен, как и любой другой ввод: request()->input('name')
Большое спасибо! Однако как я могу получить переданное значение в контроллере?