Symfony2'de istek parametreleri nasıl alınır


203

Symfony için çok yeniyim. Java ve diğerleri gibi diğer dillerde request.getParameter('parmeter name')değeri elde etmek için kullanabilirsiniz .

Symfony2 ile yapabileceğimiz benzer bir şey var mı?
Bazı örnekler gördüm ama hiçbiri benim için çalışmıyor. Kullanıcı adıyla bir form alanım olduğunu varsayalım . Form eyleminde böyle bir şey kullanmaya çalıştım:

$request = $this->getRequest();
$username= $request->request->get('username'); 

Ben de denedim

$username = $request->getParameter('username');

ve

$username=$request->request->getParameter('username');

Ancak seçeneklerin hiçbiri çalışmıyor.

foreach($request->request->all() as $req){
    print_r($req['username']);
}

getParameter()Metodu kullanırken nerede yanlış yapıyorum . Herhangi bir yardım takdir edilecektir.


İkinci satırda bir yazım hatası var: $request->request-get()olmalı $request->request->get(). Olabilir mi?
halfer

kodu aynı yazdı. burada kaçırdı. burada yazım hatası için üzgünüm. bu işe yaramaz.
Abdul Hamid

get()Doğru yöntemin olduğundan emin olmak için kılavuzu (a) kontrol ettiniz ve (b) herhangi bir sorun olup olmadığını görmek için PHP bildirimlerini açtınız mı? (c) Symfony 2'de symfony 1 gibi bir hata ayıklama araç çubuğu var, bu yüzden herhangi bir hata yapıp yapmadığınızı görebilirsiniz?
halfer

Adı ve kullanıcı adını karıştırıyor musunuz?
greg0ire

Yanıtlar:


417

Adlandırma o kadar sezgisel değil:

use Symfony\Component\HttpFoundation\Request;

public function updateAction(Request $request)
{
    // $_GET parameters
    $request->query->get('name');

    // $_POST parameters
    $request->request->get('name');

46
PHP'nin kullandığından farklıdır, ancak aslında daha mantıklıdır. $_GETveri, sorgu dizesindeki verilerdir (hiç GETtalep gerekmez) ve $_POSTveriler istek gövdesindeki verilerdir (istek olması gerekmez POST, olabilir PUT).
igorw

5
$ request-> query-> get ('name') denedi; ama aynı zamanda çalışmıyor.
Abdul Hamid

7
Parametreleri bir PUT isteğinden nasıl alabilirim?
Tjorriemorrie

10
Elbette burada çok garip bir adlandırma $request->getve $request->postdaha basit olurdu.
crmpicco

3
igorw'un yorumu bu garip adlandırma kuralına açıklık getiriyor
Dheeraj

32

Daha da basit yapıyorum:

use Symfony\Component\HttpFoundation\Request;

public function updateAction(Request $request)
{
    $foo = $request->get('foo');
    $bar = $request->get('bar');
}

Başka bir seçenek, parametrelerinizi eylem işlevi tanımınıza tanıtmaktır:

use Symfony\Component\HttpFoundation\Request;

public function updateAction(Request $request, $foo, $bar)
{
    echo $foo;
    echo $bar;
}

bu durumda, routing.yml dosyanızdaki URL modelinizin bir parçası olarak {foo} ve {bar} tanımladığınızı varsayar:

acme_myurl:
    pattern:  /acme/news/{foo}/{bar}
    defaults: { _controller: AcmeBundle:Default:getnews }

ve ilk örnekte, foohem sorgu dizesinde hem de POST gövdesinde parametre varsa , hangisi tarafından döndürülür $request->get('foo')?
Dimitry K

1
Öncelik GET, PATH, POST gibi görünüyor api.symfony.com/master/Symfony/Component/HttpFoundation/…
Dimitry K

Bu en iyi cevaptır
steampowered

7
Hayır değil. Yöntemin kendisinin dokümantasyonu, GET / POST parametrelerine özel koleksiyonları aracılığıyla erişmekten daha ağır olduğu için bunu kullanmaktan vazgeçtiğini söylüyor.
jurchiks

1
Cevap $request->get('foo'); TÜM çantalar için doğru işler (sipariş: PATH, GET, POST). Bununla birlikte, $request->request->get('foo');sadece POST çantası için çalışır. Son olarak, $request->get()verilerin (GET / POST) nerede olduğunu bilersek, ilk ( ) önerilmez.
F2000

18

Form alanı değerlerinizi almak için aşağıdaki kodu kullanabilirsiniz

use Symfony\Component\HttpFoundation\Request;

public function updateAction(Request $request)
{
    // retrieve GET and POST variables respectively
    $request->query->get('foo');
    $request->request->get('bar', 'default value if bar does not exist');
}

Veya kullanarak tüm form değerlerini dizi olarak alabilirsiniz

$request->request->all()

3
$ request-> request-> all () benim için çalışıyor ancak $ request-> query-> get ('foo') gibi bir şey; çalışmıyor.
Abdul Hamid

13

Deneyin

$request->request->get('acme_demobundle_usertype')['username']

formüler alanınızın özellik adını inceleyin


1
+1, tüm yanıtların yalnızca bu açık olanı açıkça belirtmediğini düşündüğüm için - formlarınızı symfony'nin form oluşturucu yardımıyla otomatik olarak oluşturduğunuz durumlarda, symfony form alanını sizin adınızdan daha fazla bir şekilde yeniden adlandırır bekliyoruz. Like name = "acme_demobundle_userform [field_name]"
userfuser

Burada bahsettiğiniz sözdizimi php 5.3.10 ile çalışmıyor. Bunu destekleyecek minimum sürüm nedir?
Justinas Lelys

2
@justinasLelys $ userType = $ request-> request-> get ('acme_demobundle_usertype'); $ username = $ userType ['kullanıcı adı'];
sleep-er

@JustinasLelys Sözdizimi PHP 5.4
COil olduğunu

"kullanıcı adı" tanımlanamıyor. "??" ilk.
Viktor Sydorenko

9

Bir denetleyicinin içinde:

$request = $this->getRequest();
$username = $request->get('username');

6
Symfony'un yeni sürümlerinde $this->getRequest(), İsteği denetleyici eylemine enjekte etmek lehine kullanımdan kaldırılmıştır, örneğin:public function showAction(Request $request, $id);
Adam Elsodaney

9

Seçenekleriniz:

  1. Basit:
    • $request->request->get('param')( $_POST['param']) veya
    • $request->query->get('param')( $_GET['param'])
  2. Tüm doğrulama, değer aktarımı ve hatalarla form oluşturma ve diğer birçok özellik ile iyi Symfony formları:
  3. Aradaki bir şey (aşağıdaki örneğe bakın)
<?php
/**
 * @Route("/customers", name="customers")
 *
 * @param Request $request
 * @return Response
 */
public function index(Request $request)
{
    $optionsResolver = new OptionsResolver();
    $optionsResolver->setDefaults([
        'email' => '',
        'phone' => '',
    ]);
    $filter = $optionsResolver->resolve($request->query->all());

    /** @var CustomerRepository $customerRepository */
    $customerRepository = $this->getDoctrine()->getRepository('AppBundle:Customer');

    /** @var Customer[] $customers */
    $customers = $customerRepository->findFilteredCustomers($filter);

    return $this->render(':customers:index.html.twig', [
        'customers' => $customers,
        'filter' => $filter,
    ]);
}

Hakkında daha fazla bilgi OptionsResolver- http://symfony.com/doc/current/components/options_resolver.html


8

Şimdi $this->getRequest()yöntem kullanımdan kaldırıldığı Requestiçin denetleyici eyleminize şu şekilde nesne enjekte etmeniz gerekir :

public function someAction(Request $request)

bundan sonra aşağıdakilerden birini kullanabilirsiniz.

POST verilerini istekten almak istiyorsanız aşağıdakileri kullanın:

$request->request->get('var_name');

ancak GET verilerini istekten almak istiyorsanız şunu kullanın:

$request->query->get('var_name');

6

Bunu şu şekilde yapabilirsiniz:

$clientName = $request->request->get('appbundle_client')['clientName'];

Bazen, öznitelikler korunduğunda, ortak erişim yönteminin değerini almak için erişiminiz olmayabilir:

(İLETİ)

 $clientName = $request->request->get('clientName');

(ALMAK)

$clientName = $request->query->get('clientName');

(GENERIC) karşılaştırıldığında

$clientName = $request->get('clientName');

1
Stack Overflow'a hoş geldiniz. Bir dahaki sefere daha okunabilir hale getirmek için lütfen yanıtınızı biçimlendirin ve bu yardım sayfasını da kontrol edin: Nasıl
Yanıtlanır

get sonra 2 değer varsa ne olur? böyle$clientName = $request->query->get('clientName','any');
Munkhdelger Tumenbayar

3

Sorgu dizesi veya form parametresi alma gibi çoğu durum yukarıdaki yanıtlarda ele alınmıştır.

Bağımsız değişken olarak vermek istediğiniz gövdedeki ham JSON dizesi gibi ham verilerle çalışırken json_decode(), yöntem Request::getContent()kullanılabilir.

$content = $request->getContent();

Symfony'daki HTTP istekleri hakkında ek faydalı bilgiler HttpFoundation paketinin belgelerinde bulunabilir.


1
$request = Request::createFromGlobals();
$getParameter = $request->get('getParameter');

Bu hala Requestparametreye sahip olmayan fonksiyonlar için geçerli mi? (örneğin kontrolör sınıfının özel işlevlerinde)
fritzmg

1
use Symfony\Component\HttpFoundation\Request;

public function indexAction(Request $request, $id) {

    $post = $request->request->all();

    $request->request->get('username');

}

Teşekkürler, yukarıdaki kodu da kullanabilirsiniz


0

Bir seçimden değeri almanız gerekiyorsa, şunları kullanabilirsiniz:

$form->get('nameSelect')->getClientData();

0

Bunu deneyin, işe yarıyor

$this->request = $this->container->get('request_stack')->getCurrentRequest();

Saygılarımızla


Bu soruya hiç cevap vermiyor. Soruyu soran kişi zaten istek nesnesine erişime sahip.
Layton Everson

1
@LaytonEverson üzgünüm ama yanılıyorsunuz, yöntemi // $ this-> getRequest () 2.4'ten beri kullanımdan kaldırıldı, bu yüzden çalışmıyor, bu yüzden istek nesnesine gerçekten erişimi yok;)
AchrafSoltani

Bu konuda yanlış olmasanız da, asker hangi yöntemin istek nesnesinden bir değişken aldığını merak ediyor. @Cerad bu soruyu doğru cevapladı. Sadece Request nesnesine erişmek için doğru yolu sağlamakla kalmadı, aynı zamanda soru sorusunu da yanıtladı.
Layton Everson

0
public function indexAction(Request $request)
{
   $data = $request->get('corresponding_arg');
   // this also works
   $data1 = $request->query->get('corresponding_arg1');
}

1
Bu kod soruyu cevaplayabilirken, nasıl çalıştığını ve ne zaman kullanılacağını açıklayan bir bağlam eklemek daha iyi olur. Yalnızca kod yanıtları uzun vadede yararlı değildir.
Bono

0

Symfony 4 kullanıcıları için:

$query = $request->query->get('query');

0

# Www.örnek / kayıt / yönetici

  /**
 * @Route("/register/{role}", name="app_register", methods={"GET"})
 */
public function register(Request $request, $role): Response
{
 echo $role ;
 }
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.