Я пытаюсь сохранить простую форму в базе данных, используя доктрину. Объект, который я создал — назовем его 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",
@chris_cm ты был совершенно прав. Я удалил свойство is_enabled
и добавил свойство enabled
, и теперь все работает нормально. Пожалуйста, оставьте свой комментарий в качестве ответа, чтобы я мог его принять. И это также может помочь другим народам. Спасибо.
Большой! Готово ниже.
Логично, что свойство класса Brand
должно иметь имя enabled
, с сеттером setEnabled
и геттером isEnabled
.
Чтобы устранить ошибку, переименуйте свойство в enabled
или, альтернативно, переименуйте метод получения в getIsEnabled
.
Смотрите также это обсуждение.
Логично, что свойство должно быть просто названо
enabled
с установщикомsetEnabled
и геттеромisEnabled
. Вы можете попробовать переименовать свойство или метод получения вgetIsEnabled
. См. также github.com/symfony/symfony/discussions/54885