2016-12-07 2 views
2

J'ai une application avec Sonata Admin, Sonata User et Fosuser. j'étendre le fichier d'administration de Sonata Admin pour ajouter une nouvelle colonne et sur le terrain:Extension de l'ensemble d'utilisateurs Sonata et actions personnalisées

<?php 

namespace AppBundle\Admin; 

use Sonata\UserBundle\Admin\Model\UserAdmin as SonataUserAdmin; 
use Sonata\AdminBundle\Admin\Admin; 
use Sonata\AdminBundle\Datagrid\ListMapper; 
use Sonata\AdminBundle\Datagrid\DatagridMapper; 
use Sonata\AdminBundle\Form\FormMapper; 
use Sonata\AdminBundle\Route\RouteCollection; 

class UserAdmin extends SonataUserAdmin 
{ 
/** 
    * {@inheritdoc} 
    */ 
protected function configureFormFields(FormMapper $formMapper) 
{ 
    parent::configureFormFields($formMapper); 

    $formMapper 
     ->with('Others') 
      ->add('company') 
      ->add('locations', 'sonata_type_collection', array(
       'required' => false 
      ), array(
       'edit' => 'inline', 
       'inline' => 'table', 
       'sortable' => 'position', 
      ))    
     ->end() 
    ; 
} 

// Fields to be shown on filter forms 
protected function configureDatagridFilters(DatagridMapper $datagridMapper) 
{ 
    parent::configureDatagridFilters($datagridMapper); 

    $datagridMapper 
     ->remove('email')  
     ->add('firstname') 
     ->add('lastname') 
     ->add('company.name')  
    ; 
}  

// Fields to be shown on lists 
protected function configureListFields(ListMapper $listMapper) 
{ 
    unset($this->listModes['mosaic']); 
    $listMapper 
     ->add('company.name')  
     ->add('firstname') 
     ->add('lastname') 
    ; 
    parent::configureListFields($listMapper); 
    $listMapper->remove('email'); 
    $listMapper->add('_action', 'actions', array(
     'actions' => array(
      'Invoiced' => array(
       'template' => 'AppBundle:User:list__action_invoiced.html.twig' 
      ), 
      'Credited' => array(
       'template' => 'AppBundle:user:list__action_credited.html.twig' 
      )     
     ) 
     ));   
} 

protected function configureRoutes(RouteCollection $collection) 
{ 
    parent::configureRoutes($collection); 

    $collection->add('invoiced', $this->getRouterIdParameter().'/invoiced'); 
    $collection->add('credited', $this->getRouterIdParameter().'/credited'); 
}  
} 

Maintenant, j'ai un problème avec les nouvelles actions « et » facturées « au crédit » ... Controller "Sonata\AdminBundle\Controller\CRUDController::invoicedAction" for URI "/admin/app/user/1/invoiced" is not callable.

Cette configuration fonctionne avec l'autre page d'administration mais pas avec cette extension SonataUserAdmin. Dans les autres pages je développe "Sonata \ AdminBundle \ Admin \ Admin" mais ici je dois étendre "Sonata \ UserBundle \ Admin \ Model \ UserAdmin" pour utiliser le système ...

Avez-vous une idée pour moi ???

Merci

Répondre

0

Je pense que vous avez juste besoin de reconfigurer la valeur de the baseControllerName argument à tout ce que votre contrôleur est. Vous pouvez le faire dans votre fichier de configuration admin.yml.

0

j'ai que

admin.user: 
    class: AppBundle\Admin\UserAdmin 
    arguments: [~, AppBundle\Entity\User, AppBundle:User] 
    tags: 
     - { name: sonata.admin, manager_type: orm, label: User, group: Users }  
    calls: 
     - [ setTranslationDomain, [AppBundle]]  
0

Vous avez déjà configuré le service. Maintenant, vous devez créer un UserController qui étend le CRUDController et implémente vos méthodes invoicedAction et creditedAction.

<?php 

namespace AppBundle\Controller; 

use AppBundle\Entity\User; 
use Sonata\AdminBundle\Controller\CRUDController; 
use Symfony\Component\HttpFoundation\RedirectResponse; 
use Symfony\Component\HttpFoundation\Request; 

class UserController extends CRUDController 
{ 

    /** 
    * 
    * @param string $id 
    * @param Request $request 
    * 
    * @return RedirectResponse 
    */ 
    public function invoicedAction($id = null, Request $request = null) 
    { 
     if ($request == null) { 
      $request = $this->getRequest(); 
     } 
     $id = $request->get($this->admin->getIdParameter()); 

     $user = $this->admin->getObject($id); 
     /* @var $user User */ 

     if (!$user) { 
      throw $this->createNotFoundException(sprintf('unable to find the user with id : %s', $id)); 
     } 

     $this->admin->checkAccess('invoiced', $user); 

     $this->admin->setSubject($user); 

     /// your code here... 

     return new RedirectResponse($this->admin->generateUrl('show', array('id' => $user->getId()))); 
    } 
} 
0

toujours le même ..

Controller "Sonata\AdminBundle\Controller\CRUDController::invoicedAction" for URI "/admin/app/user/1/invoiced" is not callable. 

:-(