Symfony2 istek nesnesindeki POST değerlerine erişin


93

Tamam, bu yeni başlayan bir soru, ama cevabı hiçbir yerde bulamıyorum. Symfony2'deki bir kontrolörde, POST değerine formlarımdan birinden erişmek istiyorum. Denetleyicide var:

public function indexAction()
{ 
    $request = $this->get('request');
    if ($request->getMethod() == 'POST') {
        $form = $this->get('form.factory')->create(new ContactType());
        $form->bindRequest($request);
        if ($form->isValid()) {
            $name_value = $request->request->get('name');

Maalesef $name_valuehiçbir şey iade etmiyor. Neyi yanlış yapıyorum? Teşekkürler!

Yanıtlar:


99

Symfony 2.2

bu çözüm 2.3'ten beri kullanımdan kaldırılmıştır ve 3.0'da kaldırılacaktır, belgelere bakın

$form->getData();

size form parametreleri için bir dizi verir

dan Symfony2 kitap sayfa 162 (Bölüm 12: Formlar)

[...] bazen, bir formu sınıfsız kullanmak ve gönderilen verilerin bir dizisini geri almak isteyebilirsiniz. Bu aslında gerçekten çok kolay:

public function contactAction(Request $request) {
  $defaultData = array('message' => 'Type your message here');
  $form = $this->createFormBuilder($defaultData)
  ->add('name', 'text')
  ->add('email', 'email')
  ->add('message', 'textarea')
  ->getForm();
  if ($request->getMethod() == 'POST') {
    $form->bindRequest($request);
    // data is an array with "name", "email", and "message" keys
    $data = $form->getData();
  }
  // ... render the form
}

POST değerlerine (bu durumda "ad") doğrudan istek nesnesi aracılığıyla da erişebilirsiniz, örneğin:

$this->get('request')->request->get('name');

Bununla birlikte, form çerçevesi tarafından dönüştürüldükten sonra verileri (genellikle bir nesne) döndürdüğünden, çoğu durumda getData () yöntemini kullanmanın daha iyi bir seçim olduğunu unutmayın.

Form belirtecine erişmek istediğinizde, Sorunlu yanıtını kullanmanız gerekir $postData = $request->request->get('contact');çünkü getData()öğe diziden kaldırılır.


Symfony 2.3

2.3'ten beri, handleRequestbunun yerine kullanmalısınız bindRequest:

 $form->handleRequest($request);

belgelere bakın


4
Bu harika ve şimdi en iyi cevap. $ form-> getData () mevcut değildi veya soruyu sorduğumda belgelenmedi.
Acyra

4
en yeni sürümlerde istek verilerini forma bağlamak için $ form-> handleRequest ($ istek); $ form-> submit ($ istek) yerine; bence. Daha fazla ayrıntı symfony.com/doc/2.3/book/forms.html#handling-form-submissions
adridev

127

Form post değerleri, istekteki form adı altında saklanır. Örneğin, getName()"contact" yi döndürmek için ContactType () yöntemini geçersiz kıldıysanız, şunu yaparsınız:

$postData = $request->request->get('contact');
$name_value = $postData['name'];

Hala sorun yaşıyorsanız, tüm gönderi değerlerini görmek için a var_dump()on yapmayı deneyin $request->request->all().


2
Teşekkür ederim. Var_dump yardımcı oldu, form verilerini kurtarmak için buna tam bir adla saldırdım, örneğin $ postData = $ request-> request-> get ('acme_somebundle_contact_type')
Acyra

1
Aşağıdaki timaschew yanıtına bakın, bu sorulduğundan, Symfony2 yeni bir yöntem ekledi: $ form-> getData ();
Acyra

2
Öğesini geçersiz getName()kıldıysanız, isimleri sabit kodlamamak mantıklıdır:$request->request->get($form->getName());
meze

Teşekkür ederim .. Zamanımın çoğunu kurtardım :) Şerefe !!
Anjana Silva

38

benim için işe yarayan bunu kullanıyordu:

$data = $request->request->all();
$name = $data['form']['name'];

Problematik'in bahsettiği şey bu, + orada
@meze'nin

17

ParameterBag::get()Yöntemle ilgili bir numara var . Ayarlayabilirsiniz $deepparametre için trueekstra değişken olmadan gerekli derin iç içe değer ve erişim:

$request->request->get('form[some][deep][data]', null, true);

Ayrıca varsayılan bir değer ayarlama olanağınız vardır ( get()yöntemin 2. parametresi ), gereksiz isset($form['some']['deep']['data'])çağrıyı önleyebilir .


Üçüncü parametre kullanımdan kaldırılmış ve 3.0'dan kaldırılmıştır. Not: Derin öğelerin bulunması sürüm 2.8'den beri kullanımdan kaldırılmıştır ve 3.0'da kaldırılacaktır. : github.com/symfony/symfony/blob/…
AL

8

Saha verilerine bir kontrolörden erişilebilir: Liste 12-34

$form->get('dueDate')->getData();

Ek olarak, eşlenmemiş bir alanın verileri de doğrudan değiştirilebilir: Liste 12-35

$form->get('dueDate')->setData(new \DateTime());

sayfa 164 symfony2 kitabı (9 Ekim 2013 tarihinde oluşturulmuştur)


7

Çok parçalı gönderi isteğim için ticketNumber parametresine aşağıdaki şekilde erişiyorum.

$data = $request->request->all();
$ticketNumber = $data["ticketNumber"];

1

Form nesnesi tarafından bağlanan ve doğrulanan istek verilerini almak için şunu kullanmanız gerektiğini düşünüyorum:

$form->getClientData();


7
getClientData kullanımdan kaldırıldı. GetData, getViewData, getNormData kullanın .... Form bileşeni SF2'de gerçekten dağınık (Java dünyasından ve harika RequestDataBinder'den ilham almalılar ....)
Thomas Decaux

0

İstek verilerini almak için Symfony doc

Son olarak, istek gövdesi ile gönderilen ham verilere getContent () kullanılarak erişilebilir:

$ içerik = $ istek-> getContent ();


-14

Acemiyseniz, açık kaynaklı bir proje olan Symfony2'ye hoş geldiniz, böylece çok şey öğrenmek istiyorsanız kaynağı açabilirsiniz!

"Form.php" den:

getData () getNormData () getViewData ()

Bu dosyada daha fazla ayrıntı bulabilirsiniz.


Her zaman Symfony yöntemini kullanın, $ _POST, $ istek kirli
Thomas Decaux

Evet, açıklama yapmak için iyi değilim ^^ ama bu, $form->getData();insanların tembel olduğunu ve biraz düşünmeden bir çözüm istediğini bildiğimi onayladığım çözümle tamamen aynı;
Thomas Decaux
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.