Задать вопрос

Silex: где задаются правила isValid() для формы?

Пишу на Silex загрузку формы.
Локально - все работало.
После установки на сервер - перестало записывать в базу.
Путем проб и ошибок выяснил, что проблема в:
$form->isValid()

Внимание, вопрос - где задаются правила валидности? В документации Silex этому посвящена отдельная глава "ValidatorServiceProvider", но я не вкурил :(

Могу предположить, что валидация не проходит в виду наличия пустых значений в форме. Хотя, при создание формы все потенциально пустые поля получили соответствующий параметр required=>false

$form = $app['form.factory']->createBuilder('form', $data)
        ->add('foo', 'hidden', array('required' => false))
        ->getForm();

  • Вопрос задан
  • 3056 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
@Alcospb Автор вопроса

В рендеринг формы нужно было добавить
{{ form_rest(form) }}

Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3

Как-то так создаются правила валидации:

$form = $app['form.factory']->createBuilder('form')
    ->add('name', 'text', array(
        'constraints' => array(new Assert\NotBlank(), new Assert\Length(array('min' => 5)))
    ))

Ответ написан
hell0w0rd
@hell0w0rd
Просто разработчик

А что не так-то валидируется? Вообще все валидации в FormType по умолчанию вроде

Ответ написан
@Alcospb Автор вопроса

Вот урезанный код. Может что-то увидите?

$app->match('/add/{flat_id}', function (Request $request, $flat_id) use ($app) {

    $form = $app['form.factory']->createBuilder('form', $data)
        ->add('attachment', 'file')
        ->add('type', 'choice', array(
            'choices' => array(
                '1' => 'Студия',
                '2' => 'Однушка',
                '3' => 'Евродвушка',
                '4' => 'Двушка',
                '5' => 'Трешка',
                '6' => 'Четвирешка :)'),
            'expanded' => false
            ))
        ->add('square_total')
        ...
        ->getForm();

    $form->handleRequest($request);

    if ($form->isValid()) {
        $data = $form->getData();

                $app['db']->insert('vn_db_flats', array(
            	'attachment' => rand(1,999) . $data['attachment']->getClientOriginalName(),
                'type' => $data['type'],
                'square_total' => $data['square_total'],
                 ...
            ));

            $data['attachment']->move(__DIR__ . '/attach/', $data['attachment']->getClientOriginalName());

            return $app->redirect($app['url_generator']->generate('index'));
        }
    }

    return $app['twig']->render('add.twig', array('form' => $form->createView()));

})
->bind('add')
->value('flat_id', '0');

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы