Laravel은 요청 배열에 값을 추가하는 방법이 있습니다.


114

Eloquent 함수를 호출하기 전에 요청에 추가 값을 추가하기 위해 Request 매개 변수를 사용하여 store () 또는 update () 메서드를 호출하는 동안 Laravel에서 상황이 발생했습니다.

function store(Request $request) 
{
  // some additional logic or checking
  User::create($request->all());
}

어떤 유형의 치료를 원하십니까? $request->all()배열 에 키 값을 추가 하시겠습니까?
Hammerbot

예 키 값을 추가해야합니다
Vijayanand Premnath 2016 년

array_add()도우미 를 사용할 수 없습니까 ? $array = array_add($request->all(), 'new_key', $value);: laravel.com/docs/5.2/helpers#method-array-add 이것이 당신이 찾고있는 것이 아니라면, 질문에 대한 더 많은 정보를 제공 할 수 있습니까?
Hammerbot

$ request는 php 객체입니다. 컨트롤러 측면에 일부 기능을 추가하려면 요청 객체를 배열로 변환 한 다음 원하는 것을 추가하십시오
Chathura Hettiarachchi

답변:


208

일반적으로 Request 객체에 아무것도 추가하지 않으려는 경우 수집 및 put()도우미 를 사용하는 것이 좋습니다 .

function store(Request $request) 
{
    // some additional logic or checking
    User::create(array_merge($request->all(), ['index' => 'value']));
}

또는 배열을 통합 할 수 있습니다 .

User::create($request->all() + ['index' => 'value']);

그러나 정말로 Request 객체에 무언가를 추가하고 싶다면 다음과 같이하십시오.

$request->request->add(['variable' => 'value']); //add request

3
예, 이제 저에게 효과가 있습니다. 코드를 function store (Request $ request) {// 추가 로직 또는 확인 $ plan = 123; // 사용자의 계획을 결정하는 로직 $ request-> request-> add ([ 'plan'=> $ plan]); 사용자 :: create ($ request-> all ()); }
Vijayanand Premnath

1
$ request-> all ()은 컬렉션이 아닌 배열이기 때문에 작동하지 않습니다.
kjdion84

1
$ request-> request-> add ([ 'variable'=> 'value']);
세르게이 오니 쉥코

$ request-> request-> add ... 「Undefined variable : request」라는 에러 메시지를 받았는데 「use Illuminate \ Http \ Request;」라는 에러 메시지가 나오는 이유는 무엇입니까?
robspin

$ request = collect (); 필요합니까? 먼저? $ resquest는 컬렉션 또는 배열입니까?
robspin

59

Alexey Mezenin답변 참조 :

그의 대답을 사용하는 동안 요청 객체에 직접 추가하고 다음을 사용했습니다.

$request->request->add(['variable', 'value']);

이것을 사용하여 두 개의 변수를 추가합니다.

$request[0] = 'variable', $request[1] = 'value'

당신이 나와 같은 초보자이고 동료 배열이 필요하다면 올바른 방법은

$request->request->add(['variable' => 'value']);

시간을 절약했으면 좋겠어

추신 : 감사합니다 @Alexey, 당신은 정말로 당신의 대답으로 나를 도왔습니다


$ request-> request-> add ... 「Undefined variable : request」라는 에러 메시지를 받았는데 「use Illuminate \ Http \ Request;」라는 에러 메시지가 나오는 이유는 무엇입니까?
robspin

나는 아주 늦게 그 생각 @robspin,하지만 당신은 아마 함수 예에서 요청 주입하지 않았다 : 기능 (요청 $ 요청)
mushood 둘라

1
Model클래스 에서 데이터베이스의 값을 다음과 같이 선언하지 않았기 때문에 왜 당신의 값이 데이터베이스에 삽입되지 않는지 찾고있는 사람들을 위해 :protected $fillable = ['slug'];
fWd82

40

$request->merge($array)Laravel 5.2에서 기능을 시도했는데 완벽하게 작동합니다.

예:

$request->merge(["key"=>"value"]);

2
이 완벽한 솔루션입니다
JHOAN B. HENRICHE

17

이 주제에 대해 충분히 말했지만 내 대답을 추가하는 것을 거부 할 수 없었습니다. 가장 간단한 접근 방식은

request()->merge([ 'foo' => 'bar' ]);

16

laravel 5.6에서는 미들웨어간에 매개 변수를 전달할 수 있습니다. 예를 들면 다음과 같습니다.

FirstMiddleware

public function handle($request, Closure $next, ...$params)
{
    //some code
    return $next($request->merge(['key' => 'value']));
}

SecondMiddleware

public function handle($request, Closure $next, ...$params)
{
    //some code
    dd($request->all());
}

1
$request->merge()방법 FTW! 감사.
Martin Joiner

15

아래 코드를 사용할 수도 있습니다.

$request->request->set(key, value).

나에게 더 잘 맞습니다.


적어도 Laravel 5.6에서는 이것이 완료되었습니다! 좋은 답변
Rockin4Life33

4

ex : newParam에 대한 새 매개 변수를 현재 RequestObject에 추가하려면 다음을 수행 할 수 있습니다.

$newParam = "paramvalue";
$request->request->add(['newParam' => $newParam]);

새 매개 변수를 추가 한 후 다음과 같이 요청 객체에 새로 추가 된 매개 변수를 볼 수 있습니다.

dd($request);//prints the contents of the Request object

3

내 관찰을 바탕으로 :

$request->request->add(['variable' => 'value']);전달 된 값이 있기 때문에 POST, PUT 및 DELETE 메서드 에서 (대부분) 작동하며 그중 하나는 _token. 아래 예와 같습니다.

<form action="{{ route('process', $id) }}" method="POST">
    @csrf
</form>

public function process(Request $request, $id){
    $request->request->add(['id' => $id]);
}

그러나 [코드 아래]는 전달 된 값이 없기 때문에 작동하지 않으며 실제로 추가되지 않습니다.

<a href='{{ route('process', $id) }}'>PROCESS</a>

public function process(Request $request, $id){
    $request->request->add(['id' => $id]);
}


GET 메서드를 사용하는 경우 Request 를 선언 하고 직접 값을 할당 할 수 있습니다. 아래와 같이 :

public function process($id){
    $request = new Request(['id' => $id]);
}

또는 merge. 이것은 초기화$request->request->add(['variable' => 'value']); 할 수 있고 모든 메서드 ( GET , POST , PUT , DELETE )에서 작동하는 요청 값을 추가 할 수 있기 때문에 실제로 더 좋습니다.

public function process(Request $request, $id){
    $request->merge(['id' => $id]);
}

태그 : laravel5.8.11


2

이 코드를 사용하여 내 요청에 무언가를 추가했습니다.

$req->query->add(['key'=>'variable']);
$req->request->add(['key'=>'variable']);

2

$request['key'] = 'value';를 사용 하여 요청 배열에 직접 액세스 할 수 있습니다 .


2

내가 사용하고 조사한 가장 좋은 것은 $request->merge([])(Check My Piece of Code)입니다.

public function index(Request $request) {
    not_permissions_redirect(have_premission(2));
    $filters = (!empty($request->all())) ? true : false;
    $request->merge(['type' => 'admin']);
    $users = $this->service->getAllUsers($request->all());
    $roles = $this->roles->getAllAdminRoles();
    return view('users.list', compact(['users', 'roles', 'filters']));
}

인덱스 함수 내부의 3 번 라인을 확인하십시오.


0

다음을 수행하여 미들웨어의 요청에 매개 변수를 추가 할 수 있습니다.

public function handle($request, Closure $next)
{
    $request->route()->setParameter('foo', 'bar');
    return $next($request);
}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.