문서화되지 않은 기능과 동일한 문제가 발생했지만 부모 OrderAdmin 클래스에서 addChild
및 configureSideMenu
을 호출하는 것만 남았습니다.
이 솔루션은 lineItems를 포함하는 사이드 메뉴에서 별도의 페이지를 만들 것이고, 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을 사용하는 경우 addChild
호출 서비스 정의에 갈 수 당신은 아마도 __construct
방법이 필요하지 않습니다.
작성 당시에는이 요구 사항을 피할 수있는 전용 @Admin 주석을 요청한 JMS DiExtra 번들과 함께 an open issue이 있습니다. 그것은 2,3 주 동안 조용했다. 다음