web-dev-qa-db-ja.com

Symfony2リクエストオブジェクトのPOST値にアクセスします

OK、これは初心者の質問ですが、答えがどこにも見つかりません。 Symfony2のコントローラーで、フォームの1つからPOST値にアクセスしたい。コントローラーには:

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

残念ながら$name_valueは何も返しません。何が間違っていますか?ありがとう!

94
Acyra

Symfony 2.2

このソリューションは2.3以降廃止され、3.0で削除される予定です ドキュメントを参照

$form->getData();

フォームパラメータの配列を提供します

from symfony2 book 162ページ(第12章:フォーム)

[...]場合によっては、クラスなしでフォームを使用し、送信されたデータの配列を取得することができます。これは実際には非常に簡単です。

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値(この場合は「名前」)にアクセスすることもできます。

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

ただし、フォームフレームワークによって変換された後にデータ(通常はオブジェクト)を返すため、ほとんどの場合、getData()メソッドを使用する方が適切です。

フォームトークンにアクセスする場合は、$postData = $request->request->get('contact');が配列から要素を削除するため、Problematic getData()の答えを使用する必要があります。


Symfony 2.

2.3以降では、handleRequestの代わりにbindRequestを使用する必要があります。

 $form->handleRequest($request);

ドキュメントを参照

99
timaschew

フォーム投稿値は、リクエスト内のフォームの名前で保存されます。たとえば、ContactType()のgetName()メソッドをオーバーライドして「contact」を返す場合、次のようにします。

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

それでも問題が解決しない場合は、var_dump()$request->request->all()を実行して、すべての投稿値を確認してください。

126
Problematic

私のために働いたのはこれを使用していた:

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

ParameterBag::get()メソッドには1つのトリックがあります。 $deep parametertrueに設定し、追加の変数なしで必要な深いネストされた値にアクセスできます。

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

また、デフォルト値(get()メソッドの2番目のパラメーター)を設定する可能性があり、冗長なisset($form['some']['deep']['data'])呼び出しを回避できます。

17
Dmitriy

フィールドデータには、コントローラーで次のようにアクセスできます。リスト12-34

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

さらに、マップされていないフィールドのデータも直接変更できます。リスト12-35

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

164ページsymfony2本(2013年10月9日に生成)

8
meteor

次の方法で、マルチパート投稿リクエストのticketNumberパラメーターにアクセスします。

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

フォームオブジェクトによってバインドおよび検証されたリクエストデータを取得するには、以下を使用する必要があると思います:

$form->getClientData();

1
Chicna