SonataAdmin自定义路线

时间:2013-11-22 09:43:18

标签: sonata-admin symfony-sonata

我正在尝试在我的一个SonataAdmin实体的日历上显示不同的Events

我有两项服务,即实践和活动:

bm.user.admin.practice:
   class: BM\UserBundle\Admin\PracticeAdmin
   tags:
     - { name: sonata.admin, manager_type: orm, group: cvp_users, label: Practice }
   arguments: [bm.user.admin.practice, BM\UserBundle\Entity\Practice, BMUserBundle:PracticeAdmin]

bm.crm.admin.event:
   class: BM\CrmBundle\Admin\EventAdmin
   tags:
     - { name: sonata.admin, manager_type: orm, group: cvp_users, label: Schedule }
   arguments: [bm.crm.admin.event, BM\CrmBundle\Entity\Event, BMCrmBundle:EventAdmin]

日历显示在editAction

Practice

我的问题是,我试图通过EventAdminController

中的某个操作获得结果
/**
 * Fetch Events based on User.
 *
 * @Route("/admin-events-create/{id}", name="create_event", options={"expose"=true})
 * @Method("GET|POST")
 * @Template()
 */
public function fetchEventsAction(Request $request, $id)
{
    $em = $this->getDoctrine()->getManager();

    $user = $em->getRepository('BMUserBundle:User')->find($id);
    $events = $em->getRepository('BMCrmBundle:Event')->findAllEventsByUser($user->getId());

}

我试图使用以下方法调用此方法:

{{ path('fetch_events', { _sonata_admin: 'bm.crm.admin.events'} ) }}

但是缺少我需要在控制器中使用的id

将其更改为:

{{ path('fetch_events', { id: 'myObj.id', _sonata_admin: 'bm.crm.admin.event'} ) }}或类似的东西总是给我:

There is no _ {sonata_admin {1}}

关于如何将我需要的defined for the controller值传递给路线的任何想法?

由于

2 个答案:

答案 0 :(得分:1)

首先在EventAdmin类

use Sonata\AdminBundle\Route\RouteCollection;

然后添加方法

protected function configureRoutes(RouteCollection $collection)
{
    $collection->add('fetch_events', '{id}/fetch_events');
}

如果您使用 grep 在* nix系统上,则可以检查管理类的声明路由:

php app/console router:debug | grep events

将其用作

{{ path('fetch_events', { 'id': object.id } ) }}

答案 1 :(得分:0)

我认为错误在路径中

{{ path('fetch_events', { 'id': object.id } ) }}

Sonata自定义路由以基本路由名称admin为前缀:

{{ path('your_admin_base_route_name_fetch_events', { 'id': object.id } ) }}

自定义路由的简称可用于admin方法生成的URL

admin.generateUrl('fetch_events', { 'id': object.id } )