Проверка обратного вызова Symfony с помощью Yaml

1

Моя проверка не вызывается при определении с помощью validation.yml. Используя php или аннотацию, все работает отлично.

namespace AppBundle\Form;

use Symfony\Component\Validator\Context\ExecutionContextInterface;

class LoginForm
{
    private $login;
    private $password;

    public function __construct($login, $password)
    {
        $this->login = $login;
        $this->password = $password;
    }

    public function validate(ExecutionContextInterface $context)
    {
        $context->buildViolation('Error')
            ->atPath('login')
            ->addViolation();
    }
}

Это мой validation.yml

AppBundle\Form\LoginForm:
    constraints:
        - Callback: [validate]

И это мой контроллер

class LoginController extends Controller
{
    public function loginAction(Request $request)
    {
        if ($request->isMethod('POST')) {
            $login = $request->request->get('loginform_login');
            $password = $request->request->get('loginform_password');
            $form = new LoginForm($login, $password);
            $errors = $this->get('validator')->validate($form);
            if (count($errors) > 0) {
                return $this->render('login/error.html.twig');
            }
            return $this->render('login/ok.html.twig');
        }
        return $this->render('login/login.html.twig');
    }
}

Вышеупомянутый код всегда возвращает "ok", независимо от того, какой логин или пароль я печатаю. Любая подсказка?

  • 0
    Как вы добавляете ограничение с двумя другими подходами? data_class ли вы их в класс, указанный в свойстве data_class формы? Большинство примеров, которые я видел в кулинарных книгах, и большинство случаев, с которыми я лично сталкивался, имеют тенденцию добавлять ограничения к определенному полю, а не к форме. Поэтому и спрашиваю почему.
  • 0
    Если я правильно понял, обратный вызов - это класс. Я использовал другие подходы, как показано здесь symfony.com/doc/current/reference/constraints/Callback.html
Показать ещё 2 комментария
Теги:
validation
yaml
symfony-2.7

2 ответа

3
Лучший ответ

Вам нужно поместить файл validation.yml каталог Resources/config вашего пакета.

Начиная с Symfony 2.7, Symfony также загружает файлы из каталога Resources/config/validation.

Цитирование официальных документов:

Начиная с Symfony 2.7 загружаются файлы ограничений XML и Yaml, расположенные в подкаталоге Resource/config/validation пакета. До 2.7 загружались только ресурсы /config/validation.yml (или.xml).

Некоторые примеры допустимых путей:

  • SRC/AppBundle/Ресурсы/конфигурации /validation.yml
  • SRC/AppBundle/Ресурсы/конфигурации/проверки /foo.yml
  • 0
    Извините, я запутался в app/Resources и src/AppBundle/Resources , которых по умолчанию не существует.
  • 0
    Это всегда простой ответ ...
Показать ещё 1 комментарий
1

Основываясь на наших комментариях и комментариях, все выглядит хорошо по сравнению с нынешними примерами поваренной книги. Мы твердо находимся в мозговой штурме/"видят, какая палка". Ниже приведены несколько остающихся мыслей:

  1. Может ли ваш файл validation.yml не получать синтаксический анализ/загрузку? Вы можете попробовать добавить в файл некоторые другие ограничения уровня свойства, чтобы исключить обратный вызов в качестве выхода.

  2. Вы можете попробовать инструмент lint:yaml CLI, хотя из предыдущих встреч я ожидаю, что любой некорректный YAML вызовет более явную ошибку синтаксического анализа.

  3. Чрезвычайно маловероятно (особенно после недавнего близи документации), но, возможно, примеры поваренной книги не обновлены, а поведение конфигурации каким-то образом изменилось.

  4. Запустите XDebug и начните процесс проверки. Убедитесь, что вы на самом деле нажали свой обратный вызов. Если нет, попробуйте использовать внешний или статический подход обратного вызова, просто чтобы убедиться, что это устраняет проблему.

Если вы не согласны с любым из вышеперечисленных вопросов, я буду ждать более обоснованного ответа, чем мой собственный, с большим интересом!

  • 0
    Я пробовал login: NotBlank и он не работает. Я думаю, что мой validation.yml не загружается. Я выполнил поиск по этой проблеме, и я увидел людей, которые говорили, что эта validation: { enabled: true, enable_annotations: false } строки validation: { enabled: true, enable_annotations: false } в config.yml должна это делать, но это не так. : /
  • 0
    Новый проект уже должен включать validation.yml? Потому что мне приходится создавать его вручную, а он вообще не загружается.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню