Symfony EasyAdmin3: переданный аргумент 1 должен быть экземпляром App\Entity

Я использую easyadmin для Symfony (я новичок), я застрял в этой проблеме:

Аргумент 1, переданный в App\Entity\MyOrder::setCarrier(), должен быть экземпляром App\Entity\Carrier или нулевым, заданным int, вызываемым в /Users/My/Sites/test/src/Controller/Admin/MyOrderCrudController.php (строка в коде: $myorder->setCarrier(2);)

У меня есть эта проблема для всех полей с отношением.

однако, Моя Сущность:

    /**
     * @ORM\ManyToOne(targetEntity=Delivery::class, inversedBy = "myOrder")
     */
    private $delivery;
...
    public function getCarrier(): ?carrier
    {
        return $this->carrier;
    }

    public function setCarrier(?carrier $carrier): self
    {
        $this->carrier = $carrier;

        return $this;
    }
...

Мой CrudController:

 namespace App\Controller\Admin;

use App\Entity\MyOrder;
use App\Entity\Carrier;

use Doctrine\ORM\EntityManagerInterface;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\ArrayField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
use EasyCorp\Bundle\EasyAdminBundle\Router\CrudUrlGenerator;
use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;

class MyOrderCrudController extends AbstractCrudController
{
    private $entityManager;
    private $adminUrlGenerator;

    public function __construct(EntityManagerInterface $entityManager, AdminUrlGenerator $adminUrlGenerator)
    {
        $this->entityManager = $entityManager;
        $this->adminUrlGenerator = $adminUrlGenerator;
    }

    public static function getEntityFqcn(): string
    {
        return MyOrder::class;
    }

    public function configureCrud(Crud $crud): Crud
    {
        return $crud->setDefaultSort(['id' => 'DESC']);
    }


       public function configureActions(Actions $actions): Actions
    {
        $updateDelivery = Action::new('updateDelivery', 'Delivery up', 'fas fa-truck')->linkToCrudAction('updateDelivery');

        return $actions
            ->add('detail', $updateDelivery)
            ->add('index', 'detail');
    }

    public function updateDelivery(AdminContext $context)
    {
        $myorder = $context->getEntity()->getInstance();
        $myorder->setCarrier(2);
        $this->entityManager->flush();
        $url = $this->adminUrlGenerator->setRoute('admin', [])->generateUrl();
        return $this->redirect($url);
    }
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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 нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
0
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

setCarrier принимать только Carrier объект. Вы не можете передать «2» (я полагаю, это идентификатор оператора).

Попробуй это :

$carrier = $this->entityManager->find(Carrier::class, 2);
$myorder->setCarrier($carrier);

PS: в вашем объекте есть опечатка (в имени класса первая буква в верхнем регистре, поэтому «перевозчик» вместо «перевозчик»)

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