Symfony form_errors (форма) неправильное имя поля, ошибка или мой код неверен? - PullRequest
2 голосов
/ 27 марта 2012

У меня проблема с отображением ошибок формы с {% form_errors(form) %}. Сообщение отображается неправильно, поля инвертированы . Не знаю, это ошибка или моя плохая.

В любом случае, это часть моего действия контроллера, где я создаю новый тип формы, не привязанный ни к какому объекту или объекту:

class MyController extends Controller
{
    public function newAction(Request $request)
    {
        // NOTE not passing any data to createForm method
        $context = $this->get('security.context');
        $form    = $this->createForm(new SendMailType($context));

        if('GET' == $request->getMethod()) // GET
            return array('form' => $form->createView());

        $form->bindRequest($request); // POST

        if(!$form->isValid()) return array('form' => $form->createView());

        return new Response('Form is valid');
    }
}

Где SendMailType имеет два поля, recipient и text. recipient не может быть пустым.

class SendMailType extends AbstractType
{

    /**
     * @var Symfony\Component\Security\Core\SecurityContext
     */
    protected $context;

    public function __construct(SecurityContext $context)
    {
        $this->context = $context;
    }

    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('recipient', 'text')
            ->add('text', 'textarea');
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'validation_constraint' => new Collection(array(
                'recipient' => array(new NotBlank()),
            ))
        );
    }

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

Вкл. POST с использованием {% form_errors(form) %} Я получаю сообщение об ошибке:

Поля "текст" недопустимы.

Как вы можете видеть , это совершенно неправильно , потому что в поле text не указаны правила проверки. С другой стороны, само поле recipient показывает правильную ошибку:

Это значение не должно быть пустым.

1 Ответ

1 голос
/ 28 марта 2012

Вид удивлен, что это сработало вообще. В любом случае это решит проблему:

public function getDefaultOptions(array $options)
{
    return array(
        'validation_constraint' => new Collection(array(
            'allowExtraFields' => true,
            'fields' => array('recipient' => array(new NotBlank())),
        ))
    );
}
...