Typo3依赖注入容器

时间:2014-03-23 19:07:20

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

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

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

Container有两种适当的方法:

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

ObjectManager有两个合适的方法:

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

同时

我在哪里注册依赖项?

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

我想要的是使用所有公共类的位置预先配置DI Container单例。 我的扩展然后通过其名称向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

1 个答案:

答案 0 :(得分:2)

您可以在TYPO3 Extbase Extension + Dependecy Injection

中包含或自动加载外部库

您可以在“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');