Symfony: 4 Ожидаемый аргумент типа «целое число», «NULL», указанный в пути к свойству

Получение ошибки ниже,

Ожидаемый аргумент типа "целое число", "NULL", указанный в пути к свойству "experience".

Код приведен ниже,

->add('experience', TextType::class, [
    'constraints' => [
        new NotBlank([
            "message" => $this->translator->trans('Please enter experience.')
        ]),
        new Length([
            'max' => 2
        ]),
    ],
    'required' => false
])

Когда я отправляю пустую форму (время создания), она показывает мне «Пожалуйста, введите опыт».

Теперь в форме редактирования, если я ввожу неправильное значение (больше данных, таких как 3434), оно показывает мне, что значение не должно превышать 2 символа.

Проблема возникает, когда я отправляю пустые данные во время редактирования. Отправка с пустым опытом (это обязательное поле в форме), выдает ошибку ниже

Ожидаемый аргумент типа "целое число", "NULL", указанный в пути к свойству "experience".

Я пробовал разные варианты из Интернета, такие как установка для «empty_data» значения null или '', но это не работает.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
2 295
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш метод установки должен разрешать значения null, если вы принимаете их, судя по форме:

public function setExperience(?int $experience): void
{
    $this->experience = (int) $experience;
}

Чтобы быть очень точным, и если вы хотите иметь значение NULL, вам следует избегать добавления сопоставления с целым числом. Избавьтесь от (int) в теле вышеуказанной функции.

deyvw 11.07.2019 18:22

Если вы хотите быть точным, ?int принимает как int, так и null. Я не хочу, чтобы кто-то ставил там что-то еще.

emix 11.07.2019 18:24

Конечно, именно поэтому я говорил об определении (теле), а не о декларации, а именно: $this->experience = (int) $experience; потому что, если вы оставите это, как вы написали, значение NULL будет стрелять в базу данных с 0 в качестве значения по умолчанию (int).

deyvw 13.07.2019 09:29

Проблема также решается путем простой постановки вопросительного знака перед приведением типа в аргументе, публичная функция setExperience(?int $experience): void

Kiran 05.09.2019 14:08

Другие вопросы по теме