【发布时间】:2015-01-09 17:32:52
【问题描述】:
我正在使用来自 https://github.com/ZF-Commons/ZfcTwig 的 ZfcTwig 模块
使用的参考:http://symfony.com/doc/current/cookbook/templating/twig_extension.html
使用上面的链接,我能够创建一个自定义的 Twig 扩展。在这个类中,我想访问实体管理器以从数据库中获取一些数据。
我正在通过 module.config.php 中的以下代码注册自定义扩展 -
'zfctwig' => array(
'extensions' => array(
'Application\Extension\MyCustomTwigExtension'
)
)
但由于我想在此类中访问 Doctrine Entity Manager,因此我尝试创建一个闭包 -
'zfctwig' => array(
'extensions' => array(
'Application\Extension\MyCustomTwigExtension' => function($sm) {
$entityManager = $sm->get('doctrine.entitymanager.orm_default');
$ext = new Application\Extension\MyCustomTwigExtension();
$ext->setEntityManager($entityManager);
return $ext;
},
)
),
这会给出错误消息 -
Catchable fatal error: Argument 1 passed to Twig_Environment::addExtension() must implement interface Twig_ExtensionInterface, instance of Closure given....
我已经通过工厂尝试过相同的 -
'zfctwig' => array(
'extensions' => array(
'Application\Extension\MyCustomTwigExtension' => 'Application\Extension\MyCustomTwigExtensionFactory'
)
),
错误信息 -
Catchable fatal error: Argument 1 passed to Twig_Environment::addExtension() must implement interface Twig_ExtensionInterface, instance of Application\Extension\MyCustomTwigExtensionFactory given...
关于将依赖项注入到 twig 扩展中的任何想法?它可能不仅仅是实体管理器,而是对 View Helpers 等的访问。
编辑: MyCustomTwigExtension 文件的内容 -
namespace Application\Extension;
class MyCustomTwigExtension extends \Twig_Extension {
protected $_eventManager;
public function setEntityManager($eventManager = null) {
$this->_eventManager = $eventManager;
}
public function getEntityManager() {
return $this->_eventManager;
}
public function getFilters() {
return array(
new \Twig_SimpleFilter('list', array($this, 'listFilter')),
);
}
public function listFilter($content = '') {
$repository = $this->getEntityManager()->getRepository('Application\Entity\User');
$models = $repository->findAll();
$html = '<ul>List Extension';
foreach ($models as $model) {
$html .= "<li>" . $model->getId() . ' ' . $model->getFullname() . "</li>";
}
$html .= '</ul>';
return $html;
}
public function getName() {
return 'list_extension';
}
}
谢谢。
【问题讨论】:
-
你实例化
Application\Extension\MyCustomTwigExtension。但是这个对象是错误的类型。能否请您显示您正在使用的Application\Extension\MyCustomTwigExtension类的内容? -
不是
Application\Extension\MyCustomTwigExtension而不是Application\Extension\MyCustomTwigExtensionFactory吗? -
我在注册时使用了上面添加的文件
'zfctwig' => array('extensions' => array( 'Application\Extension\MyCustomTwigExtension')) -
现在当我通过
'Application\Extension\MyCustomTwigExtension' => 'Application\Extension\MyCustomTwigExtensionFactory'注册时,它给出了错误Argument 1 passed to Twig_Environment::addExtension() must implement interface Twig_ExtensionInterface, instance of Application\Extension\MyCustomTwigExtensionFactory given... -
当我通过闭包注册时,它说参数 1 必须实现接口 Twig_ExtensionInterface 但给出了一个闭包。
标签: php doctrine-orm zend-framework2 twig twig-extension