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

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

Vijayanand Premnath

Ответов: 16

Ответы (16)

Обычно вы не хотите ничего добавлять к объекту Request, лучше использовать коллекцию и 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

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

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

Вы можете добавить параметры к запросу из промежуточного программного обеспечения, выполнив:

public function handle($request, Closure $next)
{
    $request->route()->setParameter('foo', 'bar');
    return $next($request);
}

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

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

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

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

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

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

Лучшее, что я использовал и исследовал, это $ request-> merge ([]) (Проверить мой фрагмент кода):

public function index(Request $request) {
    not_permissions_redirect(have_premission(2));
    $filters = (!empty($request->all())) ? true : false;
    $request->merge(['type' => 'admin']);
    $users = $this->service->getAllUsers($request->all());
    $roles = $this->roles->getAllAdminRoles();
    return view('users.list', compact(['users', 'roles', 'filters']));
}

Проверьте строку №3 внутри индексной функции.

просто используйте это: -

$request->merge(['index' => 'value']);

у меня работает

Это добавит новое значение к вашему объекту запроса с заданным индексом, и вы сможете использовать его в своей функции или при сохранении всех данных запроса в базе данных.

Ссылаясь на Мезенин Алексей ответ:

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

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

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

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

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

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

Надеюсь, я сэкономил ваше время

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

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

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

Пример:

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

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

Первое среднее ПО

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

Второе среднее ПО

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

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

$ request-> request-> set (ключ, значение).

Мне больше подходит.

вы можете использовать помощник laravel и магический метод request () ...

request()->request->add(['variable1'=>'value1','variable2'=>'value2']);

Если вы хотите добавить параметр запроса к объекту Request, который можно получить, позвонив

$request->get('key') 

ИЛИ

$request->all()

Мне подходит следующее.

$request->query->set('key','value');
$request->offsetSet(key, value);

По моим наблюдениям:

$ request-> request-> add (['variable' => 'value']); будет (в основном) работать в методах POST, PUT & DELETE, потому что переданы значения, одно из них _token. Как в примере ниже.

@csrf
public function process(Request $request, $id){ $request->request->add(['id' => $id]); }

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

PROCESS

public function process(Request $request, $id){
    $request->request->add(['id' => $id]);
}


ПОЛУЧИТЬЗапрос

public function process($id){
    $request = new Request(['id' => $id]);
}

Или вы можете использовать слияние. На самом деле это лучше, чем $ request-> request-> add (['variable' => 'value']);, потому что может инициализироватьи добавитьзначения запроса, которые будут работать для всех методов (GET, POST, PUT, DELETE)

public function process(Request $request, $id){
    $request->merge(['id' => $id]);
}

Тег: laravel5.8.11

2022 WebDevInsider