扩展Sonata用户套装&自定义操作

时间:2016-12-07 13:06:32

标签: symfony sonata-admin sonata sonata-user-bundle

我有一个使用Sonata Admin,Sonata User和Fosuser的应用程序。 我已从Sonata Admin扩展Admin文件以添加新的列和字段:

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

现在,我对新动作有一个问题"发票"并且"记入" ...     target_groups

此配置适用于其他管理页面,但不适用于此SonataUserAdmin扩展。 在其他页面中,我扩展了#34; Sonata \ AdminBundle \ Admin \ Admin"但在这里我需要扩展" Sonata \ UserBundle \ Admin \ Model \ UserAdmin"使用fos的用户系统...

你对我有什么想法吗?

由于

6 个答案:

答案 0 :(得分:0)

我认为您只需要重新配置the baseControllerName argument的值 无论你的控制器是什么。您可以在admin.yml配置文件中执行此操作。

答案 1 :(得分: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]]    

答案 2 :(得分: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())));
    }
}

答案 3 :(得分:0)

总是一样..

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

: - (

答案 4 :(得分:0)

您需要在sonata_user部分下设置控制器 见:

https://sonata-project.org/bundles/user/master/doc/reference/advanced_configuration.html app/config/config.yml

sonata_user:
  admin:
    user:
      controller: AppBundle:User

答案 5 :(得分:0)

(Symfony4.1 + Symfony Flex)不需要在userAdmin类的services.yaml中注册服务。如果执行此操作,则在管理面板上将有两个实体。 要覆盖基本的userAdmin类,请确保您的config / packages / sonata.yaml看起来像这样(足以覆盖):

sonata_user:
security_acl: false
manager_type: orm
class:
    user: App\Entity\Manager
    group: App\Entity\Group
admin:
    user:
       class:          App\Admin\UserAdmin
       controller:     App\Controller\InitController
       translation:    SonataUserBundle