2016-12-07 12 views
2

소나타 관리, 소나타 사용자 및 포저 사용자가있는 앱이 있습니다. 나는 새 열 및 필드 추가 소나타 관리자에서 관리 파일을 확장해야 : 이제소나타 확장 사용자 정의 묶음 및 사용자 정의 작업

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

나는 당신이 당신의 컨트롤러가 무엇이든에 the baseControllerName argument 의 값을 다시 구성 할 필요가 있다고 생각합니다. admin.yml 구성 파일에서 그렇게 할 수 있습니다.

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

당신은 이미 서비스를 구성했는지 되세요. 이제 CRUDController을 확장하고 invoicedActioncreditedAction 메서드를 구현하는 UserController을 만들어야합니다. 항상

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

:-(