2017-02-22 108 views
1

我使用的Symfony2和SonataAdminBundle,SonataMediaBundle和SonataClassificationBundle__construct()必须实现接口错误

现在我想custmize设置管理面板,但我有这个错误。

[Symfony\Component\Config\Exception\FileLoaderLoadException]     
    Catchable Fatal Error: Argument 5 passed to Sonata\MediaBundle\Admin\BaseMe 
    diaAdmin::__construct() must implement interface Sonata\ClassificationBundl 
    e\Model\CategoryManagerInterface, none given, called in /Users/whitebear/Codin 
    gWorks/httproot/myapp/app/cache/de_/appDevDebugProjectContaine_.php on l 
    ine 9494 and defined in . (which is being imported from "/Users/whitebear/Codi 
    ngWorks/httproot/myapp/app/config/routing.yml").  

我所做的是两件事。

取得DependencyInjection文件

应用/索纳塔/ MediaBundle/DependencyInjection/ApplicationSonataMediaExtension.php

<?php 

namespace Application\Sonata\MediaBundle\DependencyInjection; 

use Symfony\Component\DependencyInjection\ContainerBuilder; 
use Symfony\Component\Config\FileLocator; 
use Symfony\Component\HttpKernel\DependencyInjection\Extension; 
use Symfony\Component\DependencyInjection\Loader; 

/** 
* This is the class that loads and manages your bundle configuration 
* 
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html} 
*/ 
class ApplicationSonataMediaExtension extends Extension 
{ 
    /** 
    * {@inheritDoc} 
    */ 
    public function load(array $configs, ContainerBuilder $container) 
    { 
     $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); 
     $loader->load('services.yml'); 
    } 
} 

再发services.yml用于管理

应用/索纳塔/ MediaBundle /资源/配置/ services.yml

#Disable gallery & media menu from admin panel 
services: 
    sonata.media.admin.media: 
     class: %sonata.media.admin.media.class% 
     tags: 
      - { name: sonata.admin, manager_type: orm, show_in_dashboard: false, label_catalogue: %sonata.media.admin.media.translation_domain% , label_translator_strategy: sonata.admin.label.strategy.underscore } 
     arguments: 
      - ~ 
      - %sonata.media.admin.media.entity% 
      - %sonata.media.admin.media.controller% 
      - "@sonata.media.pool" 
      - %sonata.classification.manager.category% # add here. 

     calls: 
      - [setModelManager, ["@sonata.media.admin.media.manager"]] 
      - [setTranslationDomain, [%sonata.media.admin.media.translation_domain%]] 
      - [setTemplates, [{ inner_list_row: SonataMediaBundle:MediaAdmin:inner_row_media.html.twig , base_list_field: SonataAdminBundle:CRUD:base_list_flat_field.html.twig , list: SonataMediaBundle:MediaAdmin:list.html.twig , edit: SonataMediaBundle:MediaAdmin:edit.html.twig }]] 

    sonata.media.admin.gallery: 
     class: %sonata.media.admin.gallery.class% 
     tags: 
      - { name: sonata.admin, manager_type: orm, show_in_dashboard: false, label_catalogue: %sonata.media.admin.media.translation_domain% , label_translator_strategy: sonata.admin.label.strategy.underscore } 
     arguments: 
      - ~ 
      - %sonata.media.admin.gallery.entity% 
      - %sonata.media.admin.gallery.controller% 
      - "@sonata.media.pool" 
     calls: 
      - [setTranslationDomain, [%sonata.media.admin.media.translation_domain%]] 
      - [setTemplates, [{ list: SonataMediaBundle:GalleryAdmin:list.html.twig }]] 

在索纳塔\ MediaBundle \管理\ BaseMediaAdmin

abstract class BaseMediaAdmin extends AbstractAdmin 
{ 
    /** 
    * @var Pool 
    */ 
    protected $pool; 

    /** 
    * @var CategoryManagerInterface 
    */ 
    protected $categoryManager; 

    /** 
    * @param string     $code 
    * @param string     $class 
    * @param string     $baseControllerName 
    * @param Pool      $pool 
    * @param CategoryManagerInterface $categoryManager 
    */ 
    public function __construct($code, $class, $baseControllerName, Pool $pool, CategoryManagerInterface $categoryManager) 
    { 
     parent::__construct($code, $class, $baseControllerName); 

     $this->pool = $pool; 

     $this->categoryManager = $categoryManager; 
    } 

感谢@mdma 我想通了,我一定路径5参数CategoryManagerInterface到BaseMediaAdmin构造。

然后我更新了service.yml,但是我有这样的错误。

[Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException] 
    The service "sonata.media.admin.media" has a dependency on a non-existent p 
    arameter "sonata.classification.manager.category". Did you mean one of thes 
    e: "sonata.classification.manager.category.class", "sonata.classification.m 
    anager.tag.class", "sonata.classification.manager.context.class", "sonata.c 
    lassification.manager.tag.entity", "sonata.classification.manager.category. 
    entity", "sonata.classification.manager.context.entity", "sonata.classifica 
    tion.admin.category.class"? 

它解决。 我改变了这句话inservices.yml

- %sonata.classification.manager.category%"@sonata.classification.manager.category"

+0

我在sonata.media.admin.media中错过了一个构造参数,通过你的错误日志我的事情就像这样:sonata.classification.manager.category – zenith

+0

@mdma非常感谢。我明白缺少的是什么。我取得了一些进展。 – whitebear

回答

1

错误说:参数5不存在奏鸣曲\ MediaBundle \管理\ BaseMediaAdmin :: __结构()

所以,看你的参数sonata.media.admin.media服务配置。只有4个参数。你需要添加第五个。

在束配置(https://github.com/sonata-project/SonataMediaBundle/blob/master/Resources/config/doctrine_orm_admin.xml),有5个参数:

<argument/> 
<argument>%sonata.media.admin.media.entity%</argument> 
<argument>%sonata.media.admin.media.controller%</argument> 
<argument type="service" id="sonata.media.pool"/> 
<argument type="service" id="sonata.media.manager.category" on-invalid="null"/> 

所以,我觉得你可以添加@ sonata.media.manager.category为第五参数。

+0

我弄清楚它是如何工作的!谢谢我已经发现相同的设置写在doctrine_orm_admin.xml中 – whitebear

相关问题