Laravel - это способ добавить значения в массив запросов

Я сталкиваюсь с ситуацией в Laravel при вызове метода store() или update() с параметром Request, чтобы добавить некоторое дополнительное значение для запроса, прежде чем вызывать функции Eloquent, есть ли для этого какой-либо способ.

function store(Request $request) 
{
  // some additional logic or checking
  User::create($request->all());
}

Ответ 1

Обычно вы не хотите ничего добавлять к объекту Request, лучше использовать collection и put() helper:

function store(Request $request) 
{
    // some additional logic or checking
    User::create(array_merge($request->all(), ['index' => 'value']));
}

Или вы можете объединить массивы:

User::create($request->all() + ['index' => 'value']);

Но, если вы действительно хотите добавить что-то к объекту Request, сделайте это:

$request->request->add(['variable' => 'value']); //add request

Ответ 2

Ссылаясь на Alexey Mezenin ответ:

При использовании своего ответа мне пришлось добавить что-то прямо в объект запроса и использовать:

$request->request->add(['variable', 'value']);

Используя это, он добавляет две переменные:

$request[0] = 'variable', $request[1] = 'value'

Если вы новичок, как я, и вам нужен вспомогательный массив, правильный способ сделать это

$request->request->add(['variable' => 'value']);

Надеюсь, что я спасал ваше время

PS: Спасибо @Alexey, ты действительно помог мне с ответом

Ответ 3

Я пробовал $request->merge($array) в Laravel 5.2 и работает отлично.

Пример:

$request->merge(["key"=>"value"]);

Ответ 4

В laravel 5.6 мы можем передавать параметры между Middlewares, например:

FirstMiddleware

public function handle($request, Closure $next, ...$params)
{
    //some code
    return $next($request->merge(['key' => 'value']));
}

SecondMiddleware

public function handle($request, Closure $next, ...$params)
{
    //some code
    dd($request->all());
}

Ответ 5

Вы также можете использовать код ниже

$request->request->set(key, value).

Подходит для меня лучше.

Ответ 6

Чтобы добавить новый параметр для ex: newParam к текущему объекту Request, вы можете сделать:

$newParam = "paramvalue";
$request->request->add(['newParam' => $newParam]);

После добавления нового параметра вы сможете увидеть этот вновь добавленный параметр для объекта Request:

dd($request);//prints the contents of the Request object

Ответ 7

Я использовал этот код, чтобы добавить что-то в свой запрос.

$req->query->add(['key'=>'variable']);
$req->request->add(['key'=>'variable']);

Ответ 8

Вы можете напрямую обращаться к массиву запросов с помощью $request['key'] = 'value';

Ответ 9

Другой способ -

$a = $request->all();
$a['variable'] = 'value';

Ответ 10

достаточно сказано по этому вопросу, но я не удержался, чтобы добавить свой ответ. Я считаю, что самый простой подход

request()->merge([ 'foo' => 'bar' ]);

Ответ 11

$request->offsetSet(key, value);