Я только что перешел с 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). За последние четыре часа я пробовал много разных вещей, но я действительно не могу заставить это работать.