依赖注入 – 如何在TYPO3 Extbase扩展中包含或自动加载外部库?
我正在开发一个带有Extbase 1.4的TYPO3 4.6扩展,我试图包含一个外部库.该库,在我的情况下是
facebook PHP SDK,在$_EXTKEY / Resources / PHP / facebook-php-sdk / facebook.php下.我想图书馆自动加载并自动注入(Dependecy Injection)我需要的地方.
我在网上发现的一些评论建议应该包含带require_once()的库: http://forge.typo3.org/issues/33142
http://lists.typo3.org/pipermail/typo3-project-typo3v4mvc/2011-July/009946.html
我试过这个,它的工作原理如下: <?php require_once( t3lib_extMgm::extPath('extkey') . 'Resources/PHP/facebook-php-sdk/facebook.php'); class Tx_WsLogin_Domain_Repository_FacebookUserRepository extends Tx_WsLogin_Domain_Repository_UserRepository { protected $facebook; public function __construct() { $this->setFacebook(new Facebook(array( 'appId' =>'','secret' => '') )); parent::__construct(); } public function setFacebook(Facebook $facebook) { $this->facebook = $facebook; } public function sampleFunction() { $userId = $this->facebook->getUser(); } } ?> 但是如何让它自动加载并使用injectFacebook函数自动注入库? 编辑: 像@alex_schnitzler和@sorenmalling提到的关于自动加载:
我试过这样的(文件:ext_autoload.php): <?php $extPath = t3lib_extMgm::extPath('extKey'); return array( 'facebook' => $extPath . 'Resources/PHP/facebook-php-sdk/facebook.php',); ?> 它似乎找到并包含正确的文件.但是当我尝试使用依赖注入(如peter answered)时,我收到一个错误:
我想这是因为Facebook类的构造函数有一个必需的$config参数. EDIT2: 我做了peter在他的回答中所说的,并且在@alex_schnitzler和@sorenmalling的帮助下,我指向了ObjectManager,我的FacebookService现在看起来像这样: class Tx_Extkey_Service_FacebookService implements t3lib_Singleton { /** * @var Tx_Extbase_Object_ObjectManagerInterface */ protected $objectManager; /** * Facebook from @link https://github.com/facebook/facebook-php-sdk facebook-php-sdk * * @var Facebook */ protected $facebook; /** * @param Tx_Extbase_Object_ObjectManagerInterface $objectManager */ public function injectObjectManager(Tx_Extbase_Object_ObjectManagerInterface $objectManager) { $this->objectManager = $objectManager; } /** * */ public function initializeObject() { $this->facebook = $this->objectManager->create( 'Facebook',array( 'appId' =>'input appId here','secret' => 'input app secret here' ) ); } /** * @return Facebook */ public function getFacebook() { return $this->facebook; } } 有关更多帮助,请阅读:http://forge.typo3.org/projects/typo3v4-mvc/wiki/Dependency_Injection_(DI)关于initializeObject()和通过对象管理器创建原型对象的部分 解决方法
Extbase注入非常简单.
Here’s the actual implementation.但是,使用外部库不是.
一旦你弄清楚如何加载库,你尝试过注入它吗?像这样: /** * @var Facebook */ protected $facebook; /** * inject the facebook * * @param Facebook facebook * @return void */ public function injectFacebook(Facebook $facebook) { $this->facebook = $facebook; }
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |