Bagaimana mengubah nilai parameter request di laravel

94

Saya perlu mengubah nilai parameter permintaan saya seperti ini:

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

Saya menggunakan kode ini tetapi tidak berfungsi:

$request->offsetSet('img', $img);
Morteza Negahi
sumber
1
Kemungkinan duplikat nilai masukan perubahan Laravel - jawabannya ada di komentar untuk pertanyaan teratas.
Joel Hinz

Jawaban:

62

Penggunaan merge():

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

Sederhana! Tidak perlu mentransfer keseluruhan $request->all()ke variabel lain.

doncadavona
sumber
187

Mencoba untuk:

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

Cara lain untuk melakukannya:

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

Terima kasih kepada @JoelHinz untuk ini.

Jika Anda ingin menambah atau menimpa data bertingkat:

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

Jika Anda tidak memasukkan Request $requestobjek, Anda dapat menggunakan global request()helper atau \Request::fasad sebagai gantinya$request

Alexey Mezenin
sumber
Kesalahan: Panggilan ke metode tak terdefinisi Illuminate \ Http \ Request :: put ()
Morteza Negahi
put () adalah metode pengumpulan, $ request-> all () mengembalikan array.
Joel Hinz
3
Objek permintaan sebenarnya memiliki metode replace () dan merge (). Saya biasanya lebih suka menggunakan itu. Lihat komentar saya pada pertanyaan untuk jawaban SO tentang itu.
Joel Hinz
@JoelHinz, saya pikir mereka tidak berfungsi di Laravel 5, karena saya melihat beberapa posting di mana orang-orang mengalami masalah dengan menggunakan metode ini. Tetapi saya telah melihat Requestkode sumber L5 dan saya dapat melihat metode ini. Terima kasih.
Alexey Mezenin
4
Tanpa keringat. Jawaban Anda masih salah. Metode replace () menggantikan seluruh input - Anda perlu merge () jika Anda hanya ingin mengganti satu nilai.
Joel Hinz
8

Jika Anda perlu menyesuaikan permintaan

$data = $request->all();

Anda dapat memberikan nama bidang dan nilainya

$data['product_ref_code'] = 1650;

dan akhirnya lolos permintaan baru

$last = Product::create($data);
Alaa Moneam
sumber
3

Jika Anda perlu memperbarui properti dalam permintaan, saya sarankan Anda untuk menggunakan metode ganti dari kelas Permintaan yang digunakan oleh Laravel

$request->replace(['property to update' => $newValue]);
Ja Ouad
sumber
1
Hati-hati, ganti metode, hapus data reqest asli, dan ganti semua dengan array Anda. \ Symfony \ Component \ HttpFoundation \ ParameterBag baris 54 fungsi publik ganti (array $ parameter = []) {$ this-> parameter = $ parameter; }
Oleg
2

Jawaban bagus di sini, tetapi saya perlu mengganti nilai dalam permintaan JSON. Setelah sedikit menggali kode, saya menemukan kode berikut. Beri tahu saya jika saya melakukan sesuatu yang bodoh.

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

Jika Anda menggunakan permintaan kustom untuk validasi, untuk mengganti data untuk validasi, atau untuk menyetel data default (untuk kotak centang atau lainnya) gunakan metode override 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'),
        ]);
    }
}

Semoga informasi ini bermanfaat bagi seseorang.

Oleg
sumber
1

Ini bekerja untuk saya

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

periksa keluaran

$queryParams = $request->query();
dd($queryParams['yourParam']); // 2
Phuc
sumber