Метод, на который наложено ограничение обратного вызова, не является допустимым вызываемым - PullRequest
0 голосов
/ 14 января 2019

Я только что перешел с Silex 1.3 на 2.2.4, и моя форма больше не работает.

Это код, который раньше работал:

Контроллер

$inscriptionForm = $app['form.factory']->create(InscriptionType::class, $user, array('app' => $app));
$inscriptionForm->handleRequest($request);

Тип

namespace citations\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;

use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;

class InscriptionType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $app = $options['app']; 
        //$this->app = $options['app'];

        $builder
            ->add('username', TextType::class, array(
                'constraints' => array(
                    new Assert\NotBlank(array('message' => 'Veuillez choisir un nom d\'utilisateur.')),
                    new Assert\Regex('/[a-zA-Z0-9_]/'),
                    new Assert\Length(array(
                        'min' => 5,
                        'max' => 30,
                        'minMessage' => 'Votre nom d\'utilisateur doit contenir au minimum 5 caractères.',
                        'maxMessage' => 'Votre nom d\'utilisateur ne doit pas dépasser 30 caractères.'
                    )),
                    new Assert\Callback(array(
                        'methods' => array(function ($username, ExecutionContextInterface $context) use ($app) {
                            if ($app['dao.user']->isUserUnique($username)) {
                                $context->addViolation('Ce nom d\'utilisateur est déjà utilisé.');
                            }
                        }),
                    )),
                ),
                'label' => 'Nom d\'utilisateur'
            ));
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'app' => null,
        ));
    }

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

Кажется, есть проблема в ограничении обратного вызова, возможно, из-за того, что версия Symfony также изменилась (старая версия: 2.7, новая: 3.4). За последние четыре часа я пробовал много разных вещей, но я действительно не могу заставить это работать.

...