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.