【问题标题】:Typo3 Dependency Injection ContainerTypo3 依赖注入容器
【发布时间】:2014-03-23 19:07:20
【问题描述】:

我应该使用哪个类来添加新的依赖容器配置?

1. \TYPO3\CMS\Extbase\Object\Container
2. \TYPO3\CMS\Extbase\Object\ObjectManager

容器有 2 个合适的方法:

1.1 getInstance ($className, $givenConstructorArguments=array())
1.2 registerImplementation ($className, $alternativeClassName)

ObjectManager 有 2 个适当的方法:

1. get ($objectName)
2. create ($objectName)

还有:

在哪里注册依赖项?

在全局配置文件/Typo3/LocalConfiguration.php?

我想要的是使用所有公共类的位置预先配置 DI Container 单例。 然后我的扩展程序通过它的名称向容器请求一个对象,然后他们将对象取回。

编辑 1:

我在这里阅读了问题 How do I include or autoload external libraries in a TYPO3 Extbase Extension? + Dependecy Injection?
但是我注意到他的类在 DI 容器中注册自己(使用 Objectmanager.create)

另外我在这里阅读 http://forge.typo3.org/projects/typo3v4-mvc/wiki/Dependency_Injection_%28DI%29 但是我仍然无法理解如何将 DI Container 用作独立的服务定位器。

编辑 2:

我是否可以将我的依赖项添加到 /ext/sysext/version/ext_autoload.php ? 或者 /typo3conf/extTables.php

【问题讨论】:

    标签: typo3 typo3-6.1.x typo3-flow


    【解决方案1】:

    您可以在 TYPO3 Extbase 扩展 + 依赖注入中包含或自动加载外部库

    您可以在“ext_autoload.php”中包含外部库。您必须在扩展程序中创建 ext_autoload 文件。

    $extensionPath = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('rent_system');
    return array(
    'rent_system_TCPDF' => $extensionPath.'Resources/Private/PHP/tcpdf/tcpdf.php',  
    );
    

    控制器:

    /**
       * @var Tx_Extbase_Object_ObjectManagerInterface
       */
         protected $objectManager;
    
        /**
         * @param Tx_Extbase_Object_ObjectManagerInterface $objectManager
         */
        public function injectObjectManager(Tx_Extbase_Object_ObjectManagerInterface $objectManager) {
             $this->objectManager = $objectManager;
        }
       $pdf = $this->objectManager->create('rent_system_TCPDF');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 2014-09-15
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      相关资源
      最近更新 更多