2016-12-07 13 views
2

У меня есть приложение с Sonata Admin, Sonata User и Fosuser. У меня есть расширения файла администратора от Сонаты администратора, чтобы добавить новый столбец и поле:Расширение соната User Bundle & пользовательских действий

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

Вы уже настроили службу. Теперь вам нужно создать UserController, который расширяет CRUDController и реализует ваши методы invoicedAction и 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

Всегда же ..

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

:-(

 Смежные вопросы

  • Нет связанных вопросов^_^