Laravel에서 요청 매개 변수의 값을 변경하는 방법


95

내 요청 매개 변수의 값을 다음과 같이 변경해야합니다.

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

이 코드를 사용하지만 작동하지 않습니다.

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

1
Laravel 변경 입력 값의 중복 가능성 -대답은 상위 질문에 대한 주석에 있습니다.
Joel Hinz

답변:


65

사용 merge():

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

단순한! 전체 $request->all()를 다른 변수 로 전송할 필요가 없습니다 .


188

하려고 노력하다:

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

이를 수행하는 또 다른 방법 :

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

@JoelHinz에게 감사드립니다.

중첩 된 데이터를 추가하거나 덮어 쓰려면 :

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

Request $request객체를 주입하지 않으면 대신 전역 request()도우미 또는 \Request::파사드를 사용할 수 있습니다.$request


오류 : 정의되지 않은 메서드에 전화를 분명히 \ HTTP를 \ 요청 :: 넣어 ()
모르테 Negahi

put ()은 컬렉션 메서드이고 $ request-> all ()은 배열을 반환합니다.
Joel Hinz

3
요청 객체에는 실제로 replace () 및 merge () 메서드가 있습니다. 나는 일반적으로 그것들을 사용하는 것을 선호합니다. 그것에 대한 대답은 질문에 대한 내 의견을 참조하십시오.
Joel Hinz

@JoelHinz, 나는 사람들이 이러한 방법을 사용하는 데 문제가있는 게시물을 거의 보았 기 때문에 Laravel 5에서 작동하지 않는다고 생각했습니다. 하지만 RequestL5 의 소스 코드를 살펴 보았고 이러한 방법을 볼 수 있습니다. 감사.
Alexey Mezenin

4
땀 없습니다. 당신의 대답은 여전히 ​​틀 렸습니다. replace () 메서드는 전체 입력을 대체합니다. 하나의 값만 바꾸려면 merge ()해야합니다.
Joel Hinz

8

요청을 사용자 정의해야하는 경우

$data = $request->all();

필드 이름과 값을 전달할 수 있습니다.

$data['product_ref_code'] = 1650;

마지막으로 새로운 요청을 전달

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

3

요청에서 속성을 업데이트해야하는 경우 Laravel에서 사용하는 Request 클래스의 replace 메서드를 사용하는 것이 좋습니다.

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

1
조심하십시오. replace 메서드는 원래 reqest 데이터를 제거하고 모든 데이터를 어레이로 대체하십시오. \ Symfony \ Component \ HttpFoundation \ ParameterBag 라인 54 public function replace (array $ parameters = []) {$ this-> parameters = $ parameters; }
Oleg

2

여기에 훌륭한 답변이 있지만 JSON 요청의 값을 대체해야했습니다. 코드를 조금 파헤친 후 다음 코드를 생각해 냈습니다. 내가 멍청한 짓을하고 있는지 알려주세요.

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

2

유효성 검사를 위해 사용자 지정 요청을 사용하거나 유효성 검사를 위해 데이터를 바꾸거나 기본 데이터 (확인란 또는 기타)를 설정하려면 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'),
        ]);
    }
}

이 정보가 누군가에게 도움이되기를 바랍니다.


1

그것은 나를 위해 일합니다

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

출력 확인

$queryParams = $request->query();
dd($queryParams['yourParam']); // 2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.