首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony EasyAdmin3:传递的参数1必须是App\Entity的实例

Symfony EasyAdmin3:传递的参数1必须是App\Entity的实例
EN

Stack Overflow用户
提问于 2022-03-18 14:28:08
回答 1查看 830关注 0票数 -1

我为Symfony使用easyadmin (我是初学者),我被困在这个问题上:

参数1传递给App\Entity\MyOrder::setCarrier()必须是/Users/My/Sites/test/src/Controller/Admin/MyOrderCrudController.php中调用的App\Entity\承运人或null,int给定的实例(代码行:$myorder->set承运人(2);)

我对所有的领域都有这个问题,有一个关系。

然而,我的实体:

代码语言:javascript
复制
    /**
     * @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:

代码语言:javascript
复制
 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);
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-18 16:03:15

setCarrier只接受Carrier对象。你不能通过"2“(我想是载体号)。

试试这个:

代码语言:javascript
复制
$carrier = $this->entityManager->find(Carrier::class, 2);
$myorder->setCarrier($carrier);

PS :在你的实体中有一个错误(一个类名有大写的第一个字母,所以“承运人”而不是“承运人”)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71528564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档