Cách thay đổi giá trị của tham số yêu cầu trong laravel


94

Tôi cần thay đổi giá trị của tham số yêu cầu của mình như sau:

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

Tôi sử dụng mã này nhưng không hoạt động:

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

1
Có thể trùng lặp giá trị đầu vào thay đổi Laravel - câu trả lời nằm trong nhận xét cho câu hỏi hàng đầu.
Joel Hinz

Câu trả lời:


60

Sử dụng merge():

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

Đơn giản! Không cần phải chuyển toàn bộ $request->all()sang một biến khác.


187

Cố gắng:

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

Một cách khác để làm điều đó:

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

Cảm ơn @JoelHinz về điều này.

Nếu bạn muốn thêm hoặc ghi đè dữ liệu lồng nhau:

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

Nếu bạn không chèn Request $requestđối tượng, bạn có thể sử dụng trình request()trợ giúp toàn cục hoặc \Request::mặt tiền thay vì$request


Lỗi: Gọi phương pháp xác định Illuminate \ Http \ Yêu cầu :: đặt ()
Morteza Negahi

put () là một phương thức tập hợp, $ request-> all () trả về một mảng.
Joel Hinz

3
Đối tượng yêu cầu thực sự có các phương thức Replace () và merge (). Tôi thường thích sử dụng chúng hơn. Xem bình luận của tôi về câu hỏi để có câu trả lời SO về điều đó.
Joel Hinz

@JoelHinz, tôi nghĩ rằng chúng không hoạt động trong Laravel 5, vì tôi thấy một số bài đăng mà mọi người gặp rắc rối với việc sử dụng các phương pháp này. Nhưng tôi đã xem xét Requestmã nguồn của L5 và tôi có thể thấy các phương pháp này. Cảm ơn.
Alexey Mezenin

4
Nhạt toẹt. Tuy nhiên, câu trả lời của bạn vẫn sai. Phương thức Replace () thay thế toàn bộ đầu vào - bạn cần phải merge () nếu bạn chỉ muốn thay thế một giá trị.
Joel Hinz

8

Nếu bạn cần tùy chỉnh yêu cầu

$data = $request->all();

bạn có thể chuyển tên của trường và giá trị

$data['product_ref_code'] = 1650;

và cuối cùng vượt qua yêu cầu mới

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

3

Nếu bạn cần cập nhật một thuộc tính trong yêu cầu, tôi khuyên bạn nên sử dụng phương thức thay thế từ lớp Yêu cầu được Laravel sử dụng

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

1
Hãy cẩn thận, phương pháp thay thế loại bỏ dữ liệu yêu cầu ban đầu và thay thế tất cả bằng mảng của bạn. \ Symfony \ Component \ HttpFoundation \ ParameterBag dòng 54 public function Replace (array $ parameter = []) {$ this-> parameter = $ parameter; }
Oleg

2

Câu trả lời tuyệt vời ở đây nhưng tôi cần thay thế một giá trị trong một yêu cầu JSON. Sau khi đào sâu một chút về mã, tôi đã nghĩ ra đoạn mã sau. Hãy cho tôi biết nếu tôi đang làm điều gì đó ngu ngốc.

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

2

Nếu bạn sử dụng yêu cầu tùy chỉnh để xác thực, để thay thế dữ liệu để xác thực hoặc để đặt dữ liệu mặc định (cho hộp kiểm hoặc khác), hãy sử dụng phương pháp ghi đè 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'),
        ]);
    }
}

Tôi hy vọng thông tin này sẽ hữu ích cho ai đó.


1

Nó làm việc cho tôi

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

kiểm tra đầu ra

$queryParams = $request->query();
dd($queryParams['yourParam']); // 2
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.