2016-12-07 145 views
2

我有一個與索納塔管理員,索納塔用戶和Fosuser的應用程序。 我有延長從索納塔管理員管理文件,添加新的列和欄:擴展索納塔用戶包和自定義操作

<?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'); 
}  
} 

現在,我有「記」新動作「開發票」等問題...... Controller "Sonata\AdminBundle\Controller\CRUDController::invoicedAction" for URI "/admin/app/user/1/invoiced" is not callable.

該配置可與其他管理頁面配合使用,但不適用於此SonataUserAdmin擴展。 在其他頁面我擴展了「Sonata \ AdminBundle \ Admin \ Admin」,但在這裏我需要擴展「Sonata \ UserBundle \ Admin \ Model \ UserAdmin」以使用用戶系統的fos ...

你有給我一個想法?

感謝

回答

0

我有

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

你已經配置的服務。現在您必須創建一個UserController,它擴展CRUDController並實現您的invoicedActioncreditedAction方法。

<?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

總是相同..

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

:-(