gpt4 book ai didi

symfony - Sonata admin - 子管理类

转载 作者:行者123 更新时间:2023-12-04 12:12:04 24 4
gpt4 key购买 nike

我有一个 Order 实体,它可以关联多个 LineItem 实体。

我为 Order 创建了一个 Admin 类,为 LineItem 创建了一个 Admin 类。但我需要 LineItem Admin 类成为 Order Admin 类的子类。

在 LineItemAdmin 类中,我设置了 protected $parentAssociationMapping = 'order'; .

另外,在 OrderAdmin 类的 configureFormFields 方法中,我添加了 ->add('lineItems', 'sonata_type_model') .

但是,它仍然不起作用。订单表单中的行项目列表不可点击,所以我看不到如何从订单管理表单中获取到 LineItem 管理列表页面。

是否有需要配置的路由? lineItems有变化吗?我需要制作的表单字段?

很难在 Sonata Admin 包上找到任何好的文档,因此我们将不胜感激。

附注。即使通过 SonataAdminBundle 代码也无济于事,因为代码由于其复杂性而很难理解。

最佳答案

刚刚经历了与未记录功能相同的问题,您似乎错过的唯一步骤是调用 addChildconfigureSideMenu在父 OrderAdmin 类上。

此解决方案将在包含 lineItem 的侧菜单中创建一个单独的页面,它们不会嵌入到 OrderAdmin 表单中(我不确定这是否可行)。

无需配置任何路由,因为 SonataAdmin 会为您处理。

这是一个使用注释的父管理类示例:

namespace YourVendor\YourBundle\Admin;

use JMS\DiExtraBundle\Annotation\Service;
use JMS\DiExtraBundle\Annotation\Tag;
use JMS\DiExtraBundle\Annotation\Inject;
use JMS\DiExtraBundle\Annotation\InjectParams;

use Knp\Menu\ItemInterface as MenuItemInterface;

use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Admin\AdminInterface;

/**
* @Service("sonata.admin.order")
* @Tag("sonata.admin", attributes={"manager_type"="orm", "group"="Orders", "label"="Orders"})
*/
class OrderAdmin extends Admin
{
/**
* @InjectParams({
* "code" = @Inject("%your.parameters.code%"),
* "class" = @Inject("%your.parameters.class%"),
* "baseControllerName" = @Inject("%your.parameters.controller%"),
* "lineItems" = @Inject("sonata.admin.line_item")
* })
*/
public function __construct($code, $class, $baseControllerName, $lineItems)
{
parent::__construct($code, $class, $baseControllerName);

$this->addChild($lineItems);
}

protected function configureSideMenu(MenuItemInterface $menu, $action, AdminInterface $childAdmin = null)
{
if (!$childAdmin && !in_array($action, array('edit', 'show'))) { return; }

$admin = $this->isChild() ? $this->getParent() : $this;
$id = $admin->getRequest()->get('id');

$menu->addChild('Show Order', array('uri' => $admin->generateUrl('show', array('id' => $id))));
$menu->addChild('Edit Order', array('uri' => $admin->generateUrl('edit', array('id' => $id))));
$menu->addChild('Line items', array('uri' => $admin->generateUrl('sonata.admin.line_item.list', array('id' => $id))));
}
}

如果您将 XML 或 YML 用于您的服务,您可能不需要 __construct方法为 addChild调用可以进入服务定义。

在撰写本文时,有 an open issue使用 JMS DiExtra Bundle 和对专用 @Admin 注释的拉取请求,这也可以避免此要求。不过已经安静了几个星期。

关于symfony - Sonata admin - 子管理类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8841083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com