0

サービス内でクラスレス フォームを生成したいと考えています。

私がそれを行う方法は次のとおりです。

class StepSummary implements StepInterface 
{
    public function __construct($container)
    {
        $this->container = $container;
    }

    public function getVariables()
    {
        $form = $this->container->get('form.factory')->createBuilder('text')
            ->add('accept')
            ->getForm();

        return array('form' => $form->createView());
    }
}

APIでは、フォーム タイプを に渡す必要があることがわかりました。それへのFormBuilder参照が見つからなかったので、架空のtext文字列を入れました。これでフォームがレンダリングされますが、次のようになります。

<input type="text" id="text" name="text" required="required" />

明らかに、acceptフィールドへの参照はありません。

4

3 に答える 3

5

ここでは、コントローラーのcreateForm()メソッドが非常に役立ちました。

    public function createFormBuilder($data = null, array $options = array())
    {
        return $this->container->get('form.factory')->createBuilder('form', $data, $options);
    }

したがって、解決策は次のとおりです。

$form = $this->container->get('form.factory')->createBuilder('form')
            ->add('accept')
            ->getForm();
于 2012-09-12T10:34:53.987 に答える
2

Using a Form without a Classと呼ばれる Symfony2 ドキュメントの章を見てください。

基本的にcreateFormBuilder、文字列やオブジェクトの代わりに and を使用する必要があり、デフォルト値を持つ配列を渡すだけです。

前述のドキュメントから:

// make sure you've imported the Request namespace above the class
use Symfony\Component\HttpFoundation\Request
// ...

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->bind($request);

            // data is an array with "name", "email", and "message" keys
            $data = $form->getData();
        }

    // ... render the form
}
于 2012-09-12T10:27:15.730 に答える
1

フォームを特定のオブジェクトに関連付けたくない場合は、オブジェクトをビルダーに渡す必要はありません。次のようにできます。

    $form = $this->container->get('form.factory')->createBuilder()
        ->add('accept')
        ->getForm();

フォームにいくつかのデフォルトを設定したい場合は、フォームを配列に関連付けることができます。例えば:

    $data['accept'] = 'default accept';

    $form = $this->container->get('form.factory')->createBuilder($data)
        ->add('accept')
        ->getForm();
于 2012-09-12T10:27:32.683 に答える