Symfony2 - невозможно установить поле формы пароля для ввода «пароля» - PullRequest
1 голос
/ 14 февраля 2012

Я создал класс формы для создания формы, которая позволит пользователю дважды вводить новый пароль для его изменения.

код:

<?php

namespace UserBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\Form\FormError;
use Symfony\Component\Form\CallbackValidator;

class PasswordType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('password', null);
        $builder->add('confirmPassword', null, array('label' => 'Confirm Password', 'property_path' => false));
        $builder->addValidator(new CallbackValidator(function($form)
            {
                if($form['confirmPassword']->getData() != $form['password']->getData()) {
                    $form['confirmPassword']->addError(new FormError('Passwords must match.'));
                }
            }));
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => 'UserBundle\Entity\User',
        );
    }

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

Теперь,этот класс работает довольно хорошо, НО мои проблемы в том, что, когда я устанавливаю в первом поле пароля тип «пароль», я получаю эту ошибку:

Обнаружена циклическая ссылка в типе «пароль» (определен в классе"UserBundle \ Form \ Type \ PasswordType").

И я не могу оставить для него значение "ноль", так как оно будет использовать обычное поле ввода текста, что не идеально.

Любые люди идеи?

Ответы [ 3 ]

4 голосов
/ 14 февраля 2012

Вы определили поле типа пароля PasswordType.Затем вы добавили поле типа пароля внутри него.Это вызвало еще один вызов PasswordType :: buildForm (), чтобы добавить еще одно поле этого типа, и оно уходит навсегда.

Решение состоит в том, чтобы переименовать ваш тип пароля во что-то вроде 'userpassword' или вы можете использовать repeated тип поля вместо.Это добавит два поля и сделает сравнение их значений.

1 голос
/ 14 февраля 2012

Вы можете использовать повторный тип поля вместо вашего решения, см. http://symfony.com/doc/2.0/reference/forms/types/repeated.html

0 голосов
/ 15 февраля 2012

Кажется, проблема в использовании «пароля» в качестве значения getName ().

До:

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

После того, как:

public function getName()
{
    return 'changePassword'; // basically anything other than 'password'
}

Я изменил это на «pass», и теперь я могу использовать «password» для установки типа, то есть

$builder->add('password', 'password');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...