2012-05-24 28 views
8

En este page encontré cómo agregar la ruta para mi acción personalizada.acción personalizada en SonataAdminBundle

protected function configureRoutes(RouteCollection $collection) { 
    $collection->add('ispremium', $this->getRouterIdParameter().'/ispremium'); 
} 

Después de eso añado acción personalizada en mi clase de administración:

protected function configureListFields(ListMapper $listMapper) 
{ 
    $listMapper 
     ->addIdentifier('id') 
     ->add('code', null, array('label' => 'Code')) 
     ->add('_action', 'actions', array( 
      'actions' => array( 
       'ispremium' => array(
        'template' => 'AppMyBundleBundle:Admin:ispremium.html.twig' 
       ) 
      ) 
     )) 
    ; 
} 

generó URL como esta:

/app_dev.php/admin/mobispot/discodes/discode/300876/ispremium 

Mi plantilla para este enlace:

<a href="{{ admin.generateObjectUrl('ispremium', object) }}">Link</a> 

No sé cómo resolver este probl ems:

  1. ¿Cómo definir un controlador personalizado para esa ruta? Ahora tengo un error:

    El método "Sonata \ AdminBundle \ Controller \ CRUDController :: ispremiumAction" no existe.

  2. ¿Puedo cambiar la URL generada con el método generateUrl?

Respuesta

30

Cuando está creando el servicio para la clase EntityAdmin, el tercer argumento es el nombre del controlador. Puede crear una clase que extienda CRUDController y configurarlo en servicio. por ejemplo

El controlador,

//Vendor\YourBundle\Controller\EntityAdminController.php 

class EntityAdminController extends CRUDController 
{ 
    public function ispremiumAction() 
    { 
     //process 
    } 
} 

En services.yml,

entity.admin.service: 
    class: FQCN\Of\EntityAdmin 
    tags: 
    - { name: sonata.admin, manager_type: orm, group: your_group, label: Label } 
    arguments: [null, FQCN\Of\Entity, VendorYourBundle:EntityAdmin] 
+3

Gracias es mucho! PD Soy novato en Symfony 2.0 y acabo de descubrir que también puedo configurar _controller en $ collection-> add method –

Cuestiones relacionadas