Dependency injection 如何在TYPO3 Extbase扩展中包括或自动加载外部库+;依赖性注射?
我正在用Extbase 1.4开发一个TYPO3 4.6扩展,我试图包括一个外部库。在我的例子中,该库位于Dependency injection 如何在TYPO3 Extbase扩展中包括或自动加载外部库+;依赖性注射?,dependency-injection,typo3,autoload,extbase,Dependency Injection,Typo3,Autoload,Extbase,我正在用Extbase 1.4开发一个TYPO3 4.6扩展,我试图包括一个外部库。在我的例子中,该库位于$\u EXTKEY/Resources/PHP/facebook-PHP-sdk/facebook.PHP下。我想库自动加载和自动注入(依赖注入)在我需要它 我在网上找到的一些评论建议应该包括带有require_once()的库: 如果它只是一个很小的助手库,那么它应该存储在{PackageRoot}/Resources/PHP/{libraryName}中,并通过require包含进去
$\u EXTKEY/Resources/PHP/facebook-PHP-sdk/facebook.PHP
下。我想库自动加载和自动注入(依赖注入)在我需要它
我在网上找到的一些评论建议应该包括带有require_once()的库:
但是我怎样才能让它自动加载并用injectFacebook函数自动注入库呢
编辑:
喜欢并提到自动加载:
@PeterTheOne将所有文件放在ext_autoload.php中,然后使用DI或对象管理器
@Petertheon是否将类定义放入扩展中的ext_autoload.php中
我这样试过(文件:ext_autoload.php):
它似乎找到并包含了正确的文件。但当我尝试进行用户依赖项注入(如)时,我得到了一个错误:
传递的构造函数依赖项的信息数组不正确!
第247行/var/syscp/webs/web1/dev/typo3_src-4.5.15/typo3/sysext/extbase/Classes/Object/Container/Container.php文件中抛出的InvalidArgumentException
我认为这是因为Facebook类的构造函数有一个必需的$config参数
编辑2:
我按照peter在回答中所说的做了,在and的帮助下,他将我指向ObjectManager,我的FacebookService现在看起来是这样的:
class Tx\u Extkey\u Service\u facebook服务实现t3lib\u单例{
/**
*@var Tx\u Extbase\u Object\u objectmanager接口
*/
受保护的$objectManager;
/**
*来自@link的Facebookhttps://github.com/facebook/facebook-php-sdk facebook php sdk
*
*@var Facebook
*/
保护$facebook;
/**
*@param Tx_Extbase_Object_objectManager接口$objectManager
*/
公共函数injectObjectManager(Tx_Extbase_Object_objectManager接口$objectManager){
$this->objectManager=$objectManager;
}
/**
*
*/
公共函数初始化对象(){
$this->facebook=$this->objectManager->create(
“Facebook”,
排列(
'appId'=>'input appId here',
“机密”=>“此处输入应用程序机密”
)
);
}
/**
*@return-Facebook
*/
公共函数getFacebook(){
返回$this->facebook;
}
}
有关更多帮助,请阅读:initializeObject()和通过对象管理器创建原型对象的部分非常简单。但是,使用外部库并不简单 一旦您知道如何加载库,您是否尝试过注入它?就像这样:
/**
*@var Facebook
*/
保护$facebook;
/**
*注入facebook
*
*@param-Facebook
*@返回无效
*/
Facebook的公共功能(Facebook$Facebook){
$this->facebook=$facebook;
}
注意:您需要注释中的@param,并且在添加此代码后还需要清除配置缓存
我不知道Facebook SDK API,但希望您可以使用默认构造函数实例化Facebook对象,然后使用setter方法添加参数加载Facebook PHP并设置基本参数。然后,您可以随时插入FacebookService以获取实际的Facebook对象。首先在扩展根文件夹中创建ext_autoload.PHP 并添加您的代码,它包含一维数组,其中键作为类名(类名必须是带有扩展键的前缀),值作为文件的路径。 确保清除你的站点
<?php
$extensionPath = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('rent_system');
return array(
'rent_system_TCPDF' => $extensionPath.'Resources/Private/PHP/tcpdf/tcpdf.php',
);
?>
$pdf = $this->objectManager->create('rent_system_TCPDF');