Как объединить тип формы выбора с утверждением type=integer

#forms #validation #symfony #constraints #assert

#формы #проверка #симфония #ограничения #утверждать

Вопрос:

У меня есть поле под названием «наклонение», которое принимает целые числа от 0 до 90 (градусов).
В инструкции assert я указываю, что тип должен быть целым.

В этом случае я хотел бы отобразить поле в виде виджета выбора, выпадающего списка со значениями в диапазоне от 0 до 90.
Однако я не могу найти способ, чтобы выбор выполнялся как целое число. Каждый раз, когда я пытаюсь отправить форму, появляется ошибка «это поле должно быть типа Integer».

Есть ли какой-либо способ:
пусть комбинация выпадающего списка выбора и assertType(тип=»Целое число»)
работать?

Определение свойства в сущности:

     /**
     * @ORMColumn(name="inclination", type="integer", nullable=true)
     * @AssertNotBlank()
     * @AssertMin(limit=0)
     * @AssertMax(limit=90)
     * @AssertType(type="integer")
     */
    private $inclination;
 

Способ построения поля в форме:

 $builder->add('inclination', 'choice', array(
            'choices' => $this->getInclinationChoices(), 
            'empty_value' => 'Choose an option',
            ));

private function getInclinationChoices()
    {
        $choices = array();
        for($i=0; $i<= 90; $i  ) {
            $choices[$i] = "$i °"; 
        }
        return $choices;
    }
 

Ответ №1:

Не уверен, что это правильный подход Symfony 2, но не могли бы вы принудительно присвоить значение целочисленному типу PHP в методе объекта setInclination() ?

Например:

 public function setInclination($inclination)
{
    $this->inclination = (int) $inclination;
}
 

Я воссоздал вашу проблему локально, и это исправление сработало для меня.

Комментарии:

1. Это может сработать, спасибо за совет. Когда я приступлю к рефакторингу, я собираюсь опробовать его. На данный момент я устанавливаю его в качестве ответа, поскольку он работал для вас локально.

2. Это сработало для меня, и это дало мне желаемые результаты. Но я все еще чувствую, что может быть лучший дружественный к Symfony способ сделать это (возможно, группа проверки формы). Я просто еще не нашел его. Надеюсь, у кого-нибудь с большим опытом работы с Symfony есть альтернативное решение, которым можно поделиться с нами.