Laravel'de bir istek parametresinin değeri nasıl değiştirilir


Yanıtlar:


62

Kullanım merge():

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

Basit! Tümünü $request->all()başka bir değişkene aktarmaya gerek yok .


187

Deneyin:

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

Bunu yapmanın başka bir yolu:

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

Bunun için @JoelHinz'e teşekkürler.

İç içe geçmiş verileri eklemek veya üzerine yazmak istiyorsanız:

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

Request $requestNesne enjekte etmezseniz, bunun yerine genel request()yardımcıyı veya \Request::cepheyi kullanabilirsiniz .$request


Hata: Tanımlanmamış yönteme çağrı Illuminate \ Http \ Request :: put ()
Morteza Negahi

put () bir koleksiyon yöntemidir, $ istek-> all () bir dizi döndürür.
Joel Hinz

3
İstek nesnesi aslında replace () ve merge () yöntemlerine sahiptir. Genelde bunları kullanmayı tercih ederim. Bununla ilgili SO yanıtı için soru hakkındaki yorumuma bakın.
Joel Hinz

@JoelHinz, Laravel 5'te çalışmadıklarını düşündüm, çünkü erkeklerin bu yöntemleri kullanırken sorun yaşadığı birkaç gönderi gördüm. Ama RequestL5'in kaynak koduna baktım ve bu yöntemleri görebiliyorum. Teşekkürler.
Alexey Mezenin

4
Merak etmeyin. Yine de cevabınız hala yanlış. Replace () yöntemi tüm girdinin yerini alır - yalnızca bir değeri değiştirmek istiyorsanız, birleştirmeniz () gerekir.
Joel Hinz

8

İsteği özelleştirmeniz gerekiyorsa

$data = $request->all();

alanın adını ve değerini iletebilirsiniz

$data['product_ref_code'] = 1650;

ve sonunda yeni isteği iletin

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

3

İstekte bir özelliği güncellemeniz gerekirse, Laravel tarafından kullanılan Request sınıfından değiştirme yöntemini kullanmanızı tavsiye ederim.

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

1
Dikkatli olun, yöntemi değiştirin, orijinal gerekli verileri kaldırın ve tümünü dizinizle değiştirin. \ Symfony \ Component \ HttpFoundation \ ParameterBag 54 satırı genel işlev değiştirin (array $ parametreler = []) {$ this-> parametreler = $ parametreler; }
Oleg

2

Burada harika cevaplar var, ancak JSON isteğindeki bir değeri değiştirmem gerekiyordu. Kodu biraz araştırdıktan sonra aşağıdaki kodu buldum. Aptalca bir şey yapıyorsam bana haber ver.

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

2

Doğrulama, doğrulama için veri değiştirme veya varsayılan verileri (onay kutuları veya diğerleri için) ayarlamak için özel istekler kullanıyorsanız, geçersiz kılma yöntemini kullanın 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'),
        ]);
    }
}

Umarım bu bilgiler birileri için yararlı olur.


1

Benim için çalışıyor

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

çıktıyı kontrol et

$queryParams = $request->query();
dd($queryParams['yourParam']); // 2
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.