Як змінити значення параметра запиту в laravel


94

Мені потрібно змінити значення параметра мого запиту так:

$request->name = "My Value!";

Я використовую цей код, але не працює:

$request->offsetSet('img', $img);

1
Можливий дублікат Laravel змінює вхідне значення - відповідь є у коментарі до головного питання.
Джоел Хінц,

Відповіді:


57

Використання merge():

$request->merge([
    'user_id' => $modified_user_id_here,
]);

Просто! Не потрібно передавати ціле $request->all()в іншу змінну.


186

Намагайся:

$requestData = $request->all();
$requestData['img'] = $img;

Ще один спосіб зробити це:

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

Дякую @JoelHinz за це.

Якщо ви хочете додати або перезаписати вкладені дані:

$data['some']['thing'] = 'value';
$request->merge($data);

Якщо ви не вводите Request $requestоб'єкт, ви можете використовувати глобальний request()помічник або \Request::фасад замість$request


Помилка: Виклик невизначеного методу Illuminate \ Http \ Request :: put ()
Morteza Negahi

put () - метод збору, $ request-> all () повертає масив.
Джоель Гінц,

3
Об'єкт запиту насправді має методи replace () та merge (). Я взагалі вважаю за краще використовувати їх. Дивіться мій коментар до запитання щодо відповіді щодо цього.
Джоель Гінц,

@JoelHinz, я думав, що вони не працюють у Laravel 5, тому що я бачив небагато публікацій, де хлопці мали проблеми з використанням цих методів. Але я вивчив Requestвихідний код L5 і бачу ці методи. Дякую.
Олексій Мезенін

4
Немає поту. Однак ваша відповідь все ще неправильна. Метод replace () замінює весь вхід - вам потрібно об'єднати (), якщо ви хочете замінити лише одне значення.
Джоель Гінц,

8

Якщо вам потрібно налаштувати запит

$data = $request->all();

Ви можете передати назву поля та значення

$data['product_ref_code'] = 1650;

і нарешті передати новий запит

$last = Product::create($data);

2

Тут чудові відповіді, але мені потрібно було замінити значення в запиті JSON. Трохи покопавшись у коді, я придумав такий код. Повідомте мене, якщо я роблю щось німе.

$json = $request->json()->all();
$json['field'] = 'new value';
$request->json()->replace($json);

2

Якщо вам потрібно оновити властивість у запиті, я рекомендую вам використовувати метод replace із класу Request, що використовується Laravel

$request->replace(['property to update' => $newValue]);

1
Будьте обережні, замініть метод, видаліть оригінальні дані запиту та замініть їх усім своїм масивом. \ Symfony \ Component \ HttpFoundation \ ParameterBag рядок 54 заміна публічної функції (масив $ параметри = []) {$ this-> параметри = $ параметри; }
Олег

2

Якщо ви використовуєте власні запити для перевірки, для заміни даних для перевірки або для встановлення даних за замовчуванням (для прапорців чи іншого), використовуйте метод заміщення prepareForValidation().

namespace App\Http\Requests\Admin\Category;
    
class CategoryRequest extends AbstractRequest
{
    protected function prepareForValidation()
    {
        if ( ! $this->get('url')) {
            $this->merge([
                'url' => $this->get('name'),
            ]);
        }
        $this->merge([
            'url'    => \Str::slug($this->get('url')),
            'active' => (int)$this->get('active'),
        ]);
    }
}

Сподіваюсь, ця інформація комусь стане в нагоді.


1

Це працює для мене

$request = new Request();
$request->headers->set('content-type', 'application/json');     
$request->initialize(['yourParam' => 2]);

перевірити вихід

$queryParams = $request->query();
dd($queryParams['yourParam']); // 2
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.