扩展 Sonata 的 PageAdmin 时找不到自定义方法
Custom method not found when extending Sonata's PageAdmin
我们已经使用 Easy Extends 来扩展 Sonata 的 Page Admin。所以我现在有一个看起来像这样的 class:
class PageAdmin extends BasePageAdmin
{
public function configureRoutes(RouteCollection $collection)
{
parent::configureRoutes($collection);
$collection->add( 'send_page_emails', '/admin/send-page-emails');
}
...
}
...我的自定义 PageAdminController
class 包括以下功能:
protected function sendPageEmailsAction()
{
die('Here I am!');
}
当我尝试重定向到我的新操作时出现问题。我得到以下信息:
Call to undefined method
Sonata\AdminBundle\Controller\CRUDController::sendPageEmailsAction
如何让应用程序在正确的位置查找我的操作?
===
编辑:这里是admin.yml
的相关部分。
sonata.page.admin.page:
class: Application\Sonata\PageBundle\Admin\PageAdmin
arguments: [~, '%sonata.page.admin.page.entity%', SonataPageBundle:PageAdmin]
tags:
- { name: sonata.admin, manager_type: orm, group: admin, label: Seiten }
calls:
- [ addChild, ['@sonata.page.admin.block']]
- [ addChild, ['@sonata.page.admin.snapshot']]
- [ setPageManager, ['@sonata.page.manager.page']]
- [ setCacheManager, ['@sonata.cache.manager']]
- [ setSiteManager, ['@sonata.page.manager.site']]
- [ setTranslationDomain, ['SonataPageBundle']]
- [ setTemplate, ['edit', 'ApplicationSonataPageBundle:PageAdmin:edit_duplicate.html.twig']]
- [ setTemplate, ['tree', 'SonataPageBundle:PageAdmin:tree.html.twig']]
- [ setTemplate, ['compose', 'ApplicationSonataPageBundle:PageAdmin:compose.html.twig']]
- [ setTemplate, ['create', 'SonataAdminBundle:CRUD:edit.html.twig']]
- [ setTemplate, ['select_site', 'SonataPageBundle:PageAdmin:select_site.html.twig']]
- [ setTemplate, ['list', 'SonataPageBundle:PageAdmin:list.html.twig']]
- [ setTemplate, ['compose_container_show', 'SonataPageBundle:PageAdmin:compose_container_show.html.twig']]
admin controller 中的 action method 应该是 public 并且不受保护,否则 Sonata 将无法找到你的 action 方法:
<?php
namespace Application\Sonata\PageBundle\Controller;
use Sonata\AdminBundle\Controller\CRUDController;
class PageAdminController extends CRUDController
{
public function sendPageEmailsAction()
{
// your code here
}
}
我们已经使用 Easy Extends 来扩展 Sonata 的 Page Admin。所以我现在有一个看起来像这样的 class:
class PageAdmin extends BasePageAdmin
{
public function configureRoutes(RouteCollection $collection)
{
parent::configureRoutes($collection);
$collection->add( 'send_page_emails', '/admin/send-page-emails');
}
...
}
...我的自定义 PageAdminController
class 包括以下功能:
protected function sendPageEmailsAction()
{
die('Here I am!');
}
当我尝试重定向到我的新操作时出现问题。我得到以下信息:
Call to undefined method Sonata\AdminBundle\Controller\CRUDController::sendPageEmailsAction
如何让应用程序在正确的位置查找我的操作?
===
编辑:这里是admin.yml
的相关部分。
sonata.page.admin.page:
class: Application\Sonata\PageBundle\Admin\PageAdmin
arguments: [~, '%sonata.page.admin.page.entity%', SonataPageBundle:PageAdmin]
tags:
- { name: sonata.admin, manager_type: orm, group: admin, label: Seiten }
calls:
- [ addChild, ['@sonata.page.admin.block']]
- [ addChild, ['@sonata.page.admin.snapshot']]
- [ setPageManager, ['@sonata.page.manager.page']]
- [ setCacheManager, ['@sonata.cache.manager']]
- [ setSiteManager, ['@sonata.page.manager.site']]
- [ setTranslationDomain, ['SonataPageBundle']]
- [ setTemplate, ['edit', 'ApplicationSonataPageBundle:PageAdmin:edit_duplicate.html.twig']]
- [ setTemplate, ['tree', 'SonataPageBundle:PageAdmin:tree.html.twig']]
- [ setTemplate, ['compose', 'ApplicationSonataPageBundle:PageAdmin:compose.html.twig']]
- [ setTemplate, ['create', 'SonataAdminBundle:CRUD:edit.html.twig']]
- [ setTemplate, ['select_site', 'SonataPageBundle:PageAdmin:select_site.html.twig']]
- [ setTemplate, ['list', 'SonataPageBundle:PageAdmin:list.html.twig']]
- [ setTemplate, ['compose_container_show', 'SonataPageBundle:PageAdmin:compose_container_show.html.twig']]
admin controller 中的 action method 应该是 public 并且不受保护,否则 Sonata 将无法找到你的 action 方法:
<?php
namespace Application\Sonata\PageBundle\Controller;
use Sonata\AdminBundle\Controller\CRUDController;
class PageAdminController extends CRUDController
{
public function sendPageEmailsAction()
{
// your code here
}
}