私はsymfony 3.2プロジェクトに取り組んでおり、単純なクレジットカードフォームに少しの検証を加えています。 2.7プロジェクトで同様のフォームを作成し、constraintsオプションを使用しました。データクラスのないフォームへの制約
->add('SecurityCode', TextType::class, array(
'required' => true,
'constraints' => array(
new Length(array('min' => 3)),
new Length(array('max' => 3))),
'empty_data' => null
))
これを3.2で実行すると、「オプション '制約が存在しません」というエラーが表示されます。私はドキュメントを見て、2つのバージョンの間でそれは使用の違いを示していません。何か不足していますか?
EDIT: それは私がフォームを呼んでいる方法である可能性があります。私は自分のFormFactoryを作っているので、コントローラでフォームを作っていません。
use Symfony\Component\Form\Forms;
//...
$x = Forms::createFormFactory();
$form = $x->create('My\Bundle\Form\CreditCardFormType');
そして、ここでは、あなたのファイルの先頭にこのuse文を持っていることを確認し、私にformType
namespace My\Bundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints as Assert;
class CreditCardFormType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('cardType', ChoiceType::class, array(
'label' => 'Payment Type',
'choices' => array(
'visa' => 'visa',
'mastercard' => 'mastercard',
'discover' => 'discover'
),
'data' => 'visa',
'required' => true,
'multiple' => false,
'expanded' => true,
))
->add('CardNumber', TextType::class, array(
'required' => true,
'constraints' => array(
new Assert\CardScheme(array(
'schemes' => array('VISA', 'MASTERCARD', 'DISCOVER'),
'message' => 'The credit card number you entered is invalid.')
)),
'empty_data' => null
))
->add('SecurityCode', TextType::class, array(
'required' => true,
'constraints' => array(
new Length(array('min' => 3)),
new Length(array('max' => 3))),
'empty_data' => null
))
->add('ExpMonth', ChoiceType::class,array('required' => true, 'choices' => (range(0,12))))
->add('ExpYear', ChoiceType::class, array('required' => true, 'choices' => array(
Date('Y') => Date('Y'),
Date('Y') + 1 => Date('Y') + 1,
Date('Y') + 2 => Date('Y') + 2,
Date('Y') + 3 => Date('Y') + 3,
//...add more years
->add('save', SubmitType::class, array('label' => 'Place Order'))
;
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => null,
));
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'credit_card_form';
}
}
'createFormBuilder'セクションも表示して、フォームの作成方法を教えてください。私は問題がそこにあると思う。 –
ええ、私はそれもそこにあるかもしれないと思っていた。 – Cathmor
EDIT#2セクションを追加しました - >それを試すことができますか? –