2017-02-22 281 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

相關問題