Могу ли я использовать ограничение проверки Symfony NotEqualTo без учета регистра - PullRequest
1 голос
/ 12 апреля 2019

Я пытаюсь использовать ограничение проверки Symfony NotEqualTo, чтобы предотвратить использование определенного строкового значения.

Как указано в документации , это должно быть возможно с использованием ограничения NotEqualTo. Это работает, хотя и с учетом регистра. Однако мне нужно, чтобы это также работало без учета регистра. Я мог бы решить эту проблему, создав пользовательское ограничение, но, возможно, я просто пропускаю более простое решение.

class Foo
{
    /**
     * @Assert\Length(
     *     min=4,
     *     max=150
     * )
     * @Assert\NotEqualTo(
     *     value="bar"
     * )
     */
    private $name;
}

В этом примере зарезервированное ключевое слово - bar. Symfony не разрешит bar, но позволит Bar, BAR, BaR, ...

Могу ли я использовать проверочное ограничение Symfony NotEqualTo без учета регистра?

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Это невозможно с NotEqualTo, как подтверждено ранее.

Простой способ решить проблему - использовать Regex из String Constraints

 /**
  * @Assert\Regex(
  *     pattern="/^(bar)$/i",
  *     match=false,
  *     message="'Bar' is a reserved name",
  * )
  */
 private $name;

Также возможно создать собственное пользовательское ограничение.Но я чувствую, что не пишу код безопаснее.

1 голос
/ 12 апреля 2019

NotEqualTo сравнивает свои значения с помощью !=. С 'bar' != 'BAR' вы не можете перевернуть его.

Однако вы, вероятно, можете легко добавить проверку с помощью функции обратного вызова, чтобы сравнить версии обоих значений в нижнем регистре. Или вы можете написать свой собственный Constraint & Validator: https://symfony.com/doc/current/validation/custom_constraint.html

Возможно, вы захотите расширить Symfony / Component / Validator / AbstractComparison (уже предоставляет атрибут / свойство "value") и соответствующий Validator.

В духе полного раскрытия: OP нашел лучший способ решения своей проблемы: использование встроенного ограничения Regex (см. Ответ ниже).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...