3

問題そのまま。デフォルトのフォーム値を設定しようとしていますが、これを達成する方法はありません。

ページレイアウト

{% extends bundle ~ "Bundle::reg.html.twig" %}
{% form_theme regForm   'AcmeBundle:Form:order_type_fields.html.twig' %}
{% block content %}
<form action="{{ path('reg') }}" {{ form_enctype(regForm) }} method="POST">
    <div>
     {{ form_widget( regForm.firstname )}}
    </div>
    {{ form_rest( regForm )}}
    <input type="submit>
</form>
{% endblock %}

フィールドのレイアウト

{% block text_widget %}
{% spaceless %}
    <label>{{label}}</label>
    <input type="text" {{ block('widget_attributes') }} value="{{ value }}">
{% endspaceless %}
{% endblock text_widget %}

コントローラ

$user      = new User();
$regForm   = $this->get('form.factory')->create(new RegForm(), $user);

return $this->render("FrontendBundle:Order:type.html.twig", array(
       'regForm'   => $regForm->createView(),
);

class RegForm extends AbstractType
{
    public function buildForm( FormBuilder $builder, array $options ){
      $builder->add( 'firstname',     'text',  array( 'label' => ' ', 'data' => 'Enter your name here' ) );
    }       

    public function getName()
    {
        return 'reg';
    }
}

私はすでに多くの方法でデフォルトのフィールドデータを設定しようとしました:

firstname フィールドを定義することにより、コントローラーで (

$user->setFirstname('Enter your name here');

)。

setData メソッドを使用してフォーム ビルダーで (

$builder->add( 'firstname',     'text',  array( 'label' => ' ' ) )->setData(array('firstname' => 'Enter your name here'));

あるいは単に

$builder->setData(array('firstname' => 'Enter your name here'));

他のすべてのフォームの機能は問題ありません。たとえば、ラベル「FIRSTNAME」を問題なく設定できます。それで、私は何が欠けていますか?

UPD:最初の回答の後、直接質問することにしました:ラベルが正常に機能しているのに、なぜこれのデフォルト値が機能しないのですか:

$builder->add('firstname', 'text', array('label' => 'name', 'data' => 'Andrew'));

?

小枝のテンプレートに間違いがあるのでしょうか?

4

2 に答える 2

3

フォームタイプでこれを試しましたか:

$builder
    ->add('firstname','hidden', array(
        'attr' => array(
            'value' => 'Enter your name here',
        ),
    ))

ただし、代わりにプレースホルダー (HTML5) を使用したいようです。

$builder
    ->add('firstname','hidden', array(
        'attr' => array(
            'placeholder' => 'Enter your name here',
        ),
    ))
于 2012-10-02T19:48:37.747 に答える
1

コントローラーで、フォームを作成する前に $user オブジェクトにデータを設定します

$user      = new User();
$user->setFirstname('Default name');
$regForm   = $this->get('form.factory')->create(new RegForm(), $user);

ところで、入力でプレースホルダー属性を使用することをお勧めします。

<input placeholder="Enter your name here">

これを行うには、フォーム ビルダーに 'attr' オプションを追加します。

$builder->add('firstname', 'text', array(
    'attr' => array('placeholder' => 'Enter your name here'),
));
于 2012-06-05T17:06:29.797 に答える