0

フォームをレンダリングすると、フォームのファイル名が配列として与えられます。例:search[item]などsearch[keyword]。search はフォームの名前です。

私はフォームの操作が得意ではありませんが、名前は単純に、name="item"またはname="keyword".

私はすべてのドキュメントを見て、フォーム レンダリング トピックなどをカスタマイズしましたが、Symfony フォームのデフォルトの動作を変更して、フォーム ファイル名を「search[item]」から「item」にレンダリングする方法が見つかりません。このようにして、POST データを要求するときに、$this->getRequest()->request->get('item')多くの個々のパラメーターを処理する必要があるため、簡単に要求できます。

助けていただければ幸いです i) 私が望むものを達成する方法を理解するため。ii) 名前がこのように表示される理由を教えてください。これは良い習慣ですか?

4

2 に答える 2

3

オブジェクトからパラメーターにアクセスする代わりに、オブジェクトをフォームにRequestバインドできます。Request

たとえば、フォームを投稿するコントローラー メソッドでは、次のようになります。

namespace Acme\Controller;

use Symfony\Component\HttpFoundation\Request;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use Acme\Form\MyFormClass;

class MyFormController extends Controller
{
    receiveFormAction(Request $request)
    {
        $form = new MyFormClass();

        // you can specify that a route only accepts a post 
        // request in the routing definition
        if ($request->isMethod('POST')) {
            // this populates the form object with the data 
            // from the form submission
            $form->bind($request);

            if ( ! $form->isValid()) {
                throw new \Exception('Invalid form');
            }

            // an array of the data the format you require
            $data = $form->getData();

            $data['item'];
            $data['keyword'];
            // etc.
        }
    }
}

上記は、Symfony 2 でフォームを処理する方法であり、フォーム コンポーネントが提供するパワーをバリデーションなどで活用する方法です。

于 2013-01-12T22:52:56.913 に答える
1

Symfony supports multiple forms on a page. They might be instances of the same form or have similar field names. Having the fields for each form all together in an array makes this easy to do.

于 2013-01-12T22:50:22.263 に答える