Laravel bir istek dizisine değer eklemenin bir yolu var


109

Laravel'de, Eloquent işlevlerini çağırmadan önce isteğe ek bir değer eklemek için İstek parametresiyle bir store () veya update () yöntemini çağırırken bir durumla karşılaştım bunun için herhangi bir yol var.

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

Ne tür bir tedavi yapmak istiyorsunuz? $request->all()Diziye anahtar değerleri eklemek istiyor musunuz ?
Hammerbot

Evet, bir Anahtar değeri eklemem gerekiyor
Vijayanand Premnath

array_add()Yardımcıyı kullanamaz mısın? $array = array_add($request->all(), 'new_key', $value);: laravel.com/docs/5.2/helpers#method-array-add Aradığınız şey bu değilse, sorunuz için daha fazla bilgi verebilir misiniz?
Hammerbot

$ request php nesnesidir, anladığım kadarıyla, denetleyicinin yanına bazı özellikler eklemek istiyorsanız, istek nesnesini bir diziye dönüştürün ve sonra istediğinizi ekleyin
Chathura Hettiarachchi

Yanıtlar:


201

Genellikle, bir İstek nesnesine hiçbir şey eklemek istemezsiniz, toplama ve put()yardımcı kullanmak daha iyidir :

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

Veya dizileri birleştirebilirsiniz :

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

Ancak, gerçekten bir İstek nesnesine bir şey eklemek istiyorsanız, şunu yapın:

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

3
Evet, şimdi benim için çalışıyor Kodu işlev deposu olarak değiştirdim (Talep $ istek) {// ek bir mantık veya $ plan = 123'ü kontrol ettim; // kullanıcının planına karar vermek için bazı mantık $ request-> request-> add (['plan' => $ plan]); Kullanıcı :: oluştur ($ istek-> tümü ()); }
Vijayanand Premnath

1
$ Request-> all () bir koleksiyon değil dizi olduğundan bu işe yaramaz.
kjdion84

1
Sanırım $ request-> request-> add (['değişken' => 'değer']);
Sergey Onishchenko

$ request-> request-> add ... Hata mesajını aldım 「Tanımsız değişken: istek」 Ama 「Illuminate \ Http \ Request'i aldım;」 neden hata mesajını aldım?
robspin

$ Request = Collect (); ilk? $ Resquest bir koleksiyon mu yoksa dizi mi?
robspin

56

Cevapla ilgili Alexey Mezenin:

Cevabını kullanırken, doğrudan İstek Nesnesine bir şey eklemek zorunda kaldım ve şunu kullandım:

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

Bunu kullanarak iki değişken ekler:

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

Benim gibi bir acemiyseniz ve bir ortak diziye ihtiyacınız varsa, bunu yapmanın doğru yolu

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

Umarım biraz zaman kazanmışımdır

Not: Teşekkür ederim @Alexey, cevabınla bana gerçekten yardımcı oldun


$ request-> request-> add ... Hata mesajını aldım 「Tanımsız değişken: istek」 Ama 「Illuminate \ Http \ Request kullanıyorum;」 neden hata mesajını aldım?
robspin

@robspin Sanırım oldukça geç, ancak muhtemelen isteği işlevde enjekte
etmediniz

1
Modelprotected $fillable = ['slug'];
Sınıfımdaki

37

$request->merge($array)Laravel 5.2'de işlevi denedim ve mükemmel çalışıyor.

Misal:

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

2
bu mükemmel bir çözüm
JHOAN B.HENRICHE

16

Laravel 5.6'da, örneğin Middlewares arasında parametreleri geçirebiliriz:

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
Bu $request->merge()yöntem FTW! Teşekkürler.
Martin Joiner

16

bu konuda yeterince söyledim ama kendi cevabımı eklemek için direnemedim. En basit yaklaşımın

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

14

Aşağıdaki kodu da kullanabilirsiniz

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

Benim için daha iyi uyuyor.


En azından Laravel 5.6 ile bu böyle yapılır! Harika cevap
Rockin4Life33

4

newParamMevcut RequestObject'e ex: için yeni bir parametre eklemek için şunları yapabilirsiniz:

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

Yeni parametreyi ekledikten sonra, bu yeni eklenen parametreyi İstek nesnesine şu şekilde görebilirsiniz:

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

2

Bu kodu isteğime bir şey eklemek için kullandım.

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

2

Doğrudan istek dizisine erişebilirsiniz $request['key'] = 'value';


2

Gözlemlerime dayanarak :

$request->request->add(['variable' => 'value']);(çoğunlukla) POST, PUT & DELETE yöntemlerinde çalışacaktır , çünkü aktarılan değer (ler) vardır, bunlardan biri _token. Aşağıdaki örnek gibi.

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

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

Ancak [aşağıdaki kod] çalışmaz çünkü hiçbir değer geçilmez, gerçekten eklenmez.

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

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


Kullanırken GET ya ilan edebilir yöntemi İsteği üzerine ve atama değer (ler) ile doğrudan. Aşağıdaki gibi:

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

Veya kullanabilirsiniz merge. Bu aslında daha iyidir $request->request->add(['variable' => 'value']);çünkü başlatmak ve eklemek bütün yöntemlerde (için çalışacaktır istek değerlerini GET , POST , PUT , DELETE )

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

Etiket: laravel5.8.11


2

Üzerinde kullandığım ve araştırdığım en iyisi $ request-> merge ([]) (Kod Parçamı Kontrol Et):

    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']));
    }

Dizin işlevi içindeki 3. satırı kontrol edin.


0

Şunları yaparak bir ara yazılımdan isteğe parametreler ekleyebilirsiniz:

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

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.