4

Symfony2プロジェクトの「 Rating 」エンティティのカスタムフォームタイプがあります。フィールド、つまり整数があります。次に、このエンティティのフォームを作成しました。コードは次のとおりです。

class RatingType extends AbstractType
{
  public function buildForm(FormBuilder $builder, array $options){
     $builder->add('value', 'hidden', array('data' => 113));
  }

  public function getDefaultOptions(array $options){
     return array(
         'data_class' => 'Acme\ArticleBundle\Entity\Rating',
     );
  }    

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

HTMLページの送信ボタンを押すと、フォームが検証されず、「整数ではありません」というエラーメッセージが画面に表示されます。なぜSymfony2は値113を整数に
キャストしないのですか?この問題を解決するにはどうすればよいですか?

4

5 に答える 5

8

hiddenFormTypeの代わりに型を使用する場合integer、symfony はフィールドから何を期待するかを認識しないため、文字列であると想定します。フォームをエンティティにバインドすると、隠しフィールドが文字列としてエンティティ フィールドに格納されます。

type="integer"値は整数ではなく、整数にキャストできる文字列であるため、 で検証するとエンティティの検証は失敗します(doctrine は指定された型に変換できるかどうかを調べるため、保存は機能します)。

秘訣はtype="numeric、エンティティ検証アノテーションで " を使用することです。これにより、値が現在実際の整数であるかどうかではなく、フィールドを整数に変換できるかどうかがチェックされます。

于 2012-05-30T19:35:37.033 に答える
2

Sgoettschkes の回答のおかげで、これはうまくいきました。次に例を示します。

/**
* @var integer
* @Assert\NotBlank()
* @Assert\Type(type="numeric")
*
* @ORM\Column(name="value", type="integer",  nullable=false)
*/

private $value;
于 2013-10-09T10:22:30.663 に答える
0

もう 1 つの方法は、setメソッドでエンティティのパラメーターを型キャストすることです。例えば:

/** @var integer $value */
private $value;

public function setValue($val){
     $this->$val = (int) $val;
     return $this;
}
于 2018-01-06T01:26:39.727 に答える
-1

次を使用します。

$builder->add('fieldname', 'integer', array('attr' => array('style' => 'display: none') ) )
于 2013-11-21T12:02:56.710 に答える