Symfony2 DI不将服务作为参数传递

igormukhingmailcom

伙计们。

请帮助我,我完全被困住了。

/src/Application/Lexik/TranslationBundle/Resources/config/services.yml

parameters:
    lexik_translation.locale.loader.class: Application\Lexik\TranslationBundle\LocalesLoader\OrmLocalesLoader
    lexik_translation.locale.entity: Application\Lexik\TranslationBundle\Entity\Locale

services:
    lexik_translation.locale.repository:
        class: Doctrine\ORM\EntityRepository
        factory_service: doctrine.orm.default_entity_manager
        factory_method: getRepository
        arguments:
            - %lexik_translation.locale.entity%

    lexik_translation.locale.loader:
        class: %lexik_translation.locale.loader.class%
        parameters:
            - @lexik_translation.locale.repository

src /应用程序/Ibrows/SonataTranslationBundle/DependencyInjection/Compiler/ReplaceCrudControllerPass.php

namespace Application\Ibrows\SonataTranslationBundle\DependencyInjection\Compiler;

use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;

class ReplaceCrudControllerPass implements CompilerPassInterface
{
    /**
     * {@inheritdoc}
     */
    public function process(ContainerBuilder $container)
    {
        if (!$container->hasDefinition('lexik_translation.locale.loader')) {
            throw new \RuntimeException('The "lexik_translation.locale.loader" configuration required.');
        }

        $definition = $container->getDefinition('ibrows_sonata_translation.admin.orm');
        $definition->setClass('Application\Ibrows\SonataTranslationBundle\Admin\ORMTranslationAdmin');
        $definition->replaceArgument(2, 'ApplicationIbrowsSonataTranslationBundle:TranslationCRUD');
        $definition->addMethodCall('setLocalesLoader', array(new Reference('lexik_translation.locale.loader')));
    }
}

当我运行任何cli命令或重新加载页面时,出现下一个错误:

[Symfony\Component\Debug\Exception\ContextErrorException]                                                                                                                         
Catchable Fatal Error: Argument 1 passed to Application\Lexik\TranslationBundle\LocalesLoader\OrmLocalesLoader::__construct() must be an instance of Doctrine\ORM\EntityRepository, none given, called in /private/var/www/odesk/translate-admin/app/cache/dev/appDevDebugProjectContainer.php on line 2385 and defined                                           

在appDevDebugProjectContainer.php处有下一个(不将@ lexik_translation.locale.repository注入构造函数中):

/**
 * Gets the 'lexik_translation.locale.loader' service.
 *
 * This service is shared.
 * This method always returns the same instance of the service.
 *
 * @return \Application\Lexik\TranslationBundle\LocalesLoader\OrmLocalesLoader A Application\Lexik\TranslationBundle\LocalesLoader\OrmLocalesLoader instance.
 */
protected function getLexikTranslation_Locale_LoaderService()
{
    return $this->services['lexik_translation.locale.loader'] = new \Application\Lexik\TranslationBundle\LocalesLoader\OrmLocalesLoader();
}

为什么这么重要?有人知道吗?

igormukhingmailcom

我只是有错字。并在发帖时意识到这一点。需要通过arguments:,而不是parameters:services.yml正确的是:

services:
    lexik_translation.locale.repository:
        class: Doctrine\ORM\EntityRepository
        factory_service: doctrine.orm.default_entity_manager
        factory_method: getRepository
        arguments:
            - %lexik_translation.locale.entity%

    lexik_translation.locale.loader:
        class: %lexik_translation.locale.loader.class%
        arguments: # < --- HERE WAS A TYPO
            - @lexik_translation.locale.repository

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章