2017-02-22 11 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").  

Что я сделал, это две вещи.

сделал файл внедрение зависимости

Применение/Sonata/MediaBundle/внедрение зависимости/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 для администратора

Применение/Sonata/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 \ Admin \ 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

Мне кажется, что у вас отсутствует параметр contructor в вашем sonata.media.admin.media, по вашей ошибке log i thing что-то вроде этого: sonata.classification.manager.category – zenith

+0

@mdma Большое спасибо. Я понял, чего не хватает. Я немного продвинулся. – whitebear

ответ

1

Погрешность сказать: Аргумент 5 не существует в Сонате \ MediaBundle \ Admin \ 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 в качестве 5-го аргумента.

+0

Я выясняю, как это работает! Спасибо, я нашел, что тот же параметр написан в doctrine_orm_admin.xml – whitebear

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

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