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
は何も返しません。何が間違っていますか?ありがとう!
このソリューションは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()
の答えを使用する必要があります。
2.3以降では、handleRequest
の代わりにbindRequest
を使用する必要があります。
$form->handleRequest($request);
フォーム投稿値は、リクエスト内のフォームの名前で保存されます。たとえば、ContactType()のgetName()
メソッドをオーバーライドして「contact」を返す場合、次のようにします。
$postData = $request->request->get('contact');
$name_value = $postData['name'];
それでも問題が解決しない場合は、var_dump()
で$request->request->all()
を実行して、すべての投稿値を確認してください。
私のために働いたのはこれを使用していた:
$data = $request->request->all();
$name = $data['form']['name'];
ParameterBag::get()
メソッドには1つのトリックがあります。 $deep
parameter をtrue
に設定し、追加の変数なしで必要な深いネストされた値にアクセスできます。
$request->request->get('form[some][deep][data]', null, true);
また、デフォルト値(get()
メソッドの2番目のパラメーター)を設定する可能性があり、冗長なisset($form['some']['deep']['data'])
呼び出しを回避できます。
フィールドデータには、コントローラーで次のようにアクセスできます。リスト12-34
$form->get('dueDate')->getData();
さらに、マップされていないフィールドのデータも直接変更できます。リスト12-35
$form->get('dueDate')->setData(new \DateTime());
164ページsymfony2本(2013年10月9日に生成)
次の方法で、マルチパート投稿リクエストのticketNumberパラメーターにアクセスします。
$data = $request->request->all();
$ticketNumber = $data["ticketNumber"];
フォームオブジェクトによってバインドおよび検証されたリクエストデータを取得するには、以下を使用する必要があると思います:
$form->getClientData();