«Метод isEnabled в классе App\Entity\Brand требует 0 аргументов, но должен принимать только 1»

Я пытаюсь сохранить простую форму в базе данных, используя доктрину. Объект, который я создал — назовем его Brand — используя php bin/console make:entity, имеет логическое свойство:

#[ORM\Entity(repositoryClass: BrandRepository::class)]
class Brand
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column]
    private ?int $id = null;

    #[ORM\Column]
    private ?bool $is_enabled = null;

    public function getId(): ?int
    {
        return $this->id;
    }

    public function isEnabled(): ?bool
    {
        return $this->is_enabled;
    }

    public function setEnabled(bool $is_enabled): static
    {
        $this->is_enabled = $is_enabled;

        return $this;
    }
}

Эта сущность создается полностью автоматически, и я ничего не менял. Я также создал тип формы с помощью команды php bin/console make:crud. Сгенерированный тип формы с именем BrandType показан ниже:

class BrandType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            ->add('is_enabled', CheckboxType::class, [
                'required' => false,
                // I tried these 2 options, but didn't help:
                // 'empty_data' => false,
                // 'false_values' => [false],
                'value' => true
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            'data_class' => Brand::class,
        ]);
    }
}

Как вы можете видеть ниже, обработчик формы очень прост:

#[Route('/brand')]
class BrandController extends AbstractController
{
    #[Route('/new', methods: ['GET', 'POST'])]
    public function new(Request $request, EntityManagerInterface $entityManager): Response
    {
        $brand = new Brand();
        $form = $this->createForm(BrandType::class, $brand);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $entityManager->persist($brand);
            $entityManager->flush();

            return $this->redirectToRoute('blah', [], Response::HTTP_SEE_OTHER);
        }

        return $this->render('brand/new.html.twig', [
            'brand' => $brand,
            'form' => $form,
        ]);
    }
}

Но когда я отправляю форму, я получаю эту ошибку:

Для метода isEnabled в классе App\Entity\Catalog\Brand требуется значение 0. аргументы, но следует принять только 1..

И исключение выделяет строку $form->handleRequest($request); в контроллере. Я использую PHP 8.3.6 с Symfony 6.4.10, и пакеты доктрин, которые я использую, перечислены ниже:

"doctrine/dbal": "^3",
"doctrine/doctrine-bundle": "^2.12",
"doctrine/doctrine-migrations-bundle": "^3.3",
"doctrine/orm": "^3.2",

Логично, что свойство должно быть просто названо enabled с установщиком setEnabled и геттером isEnabled. Вы можете попробовать переименовать свойство или метод получения в getIsEnabled. См. также github.com/symfony/symfony/discussions/54885

chris_cm 02.09.2024 11:32

@chris_cm ты был совершенно прав. Я удалил свойство is_enabled и добавил свойство enabled, и теперь все работает нормально. Пожалуйста, оставьте свой комментарий в качестве ответа, чтобы я мог его принять. И это также может помочь другим народам. Спасибо.

amiry jd 02.09.2024 16:11

Большой! Готово ниже.

chris_cm 02.09.2024 18:18
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
3
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Логично, что свойство класса Brand должно иметь имя enabled, с сеттером setEnabled и геттером isEnabled.

Чтобы устранить ошибку, переименуйте свойство в enabled или, альтернативно, переименуйте метод получения в getIsEnabled.

Смотрите также это обсуждение.

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