在我的Symfony2控制器中,这很好用:
$uploadManager = $this->get('upload.upload_manager');
Run Code Online (Sandbox Code Playgroud)
但当我将它移动到自定义监听器时:
use Doctrine\ORM\Event\LifecycleEventArgs;
use Acme\UploadBundle\Upload\UploadManager;
class PersonChange
{
public function postRemove(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
$entityManager = $args->getEntityManager();
$uploadManager = $this->get('ep_upload.upload_manager');
echo "the upload dir is " . $uploadManager->getUploadDir();
}
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
Fatal error: Call to undefined method Acme\MainBundle\Listener\PersonChange::get() in /home/frank/...
Run Code Online (Sandbox Code Playgroud)
我知道我必须使用一个使用声明,但不知道该使用什么.
Mat*_*ieu 12
当我遇到完全相同的问题时,我可以帮忙
所说的是完全没问题的,我会尝试弹出一个真实的例子.
就我而言,我想访问
$lucenemanager = $this->get('ivory.lucene.manager')
Run Code Online (Sandbox Code Playgroud)
即使通过扩展控制器,我也无法让它在控制器访问容器时工作(我仍然不明白为什么)
在config.yml中,我的监听器(searchindexer.listener)声明如下:
services:
searchindexer.listener:
class: ripr\WfBundle\Listener\SearchIndexer
arguments:
luceneSearch: "@ivory_lucene_search"
tags:
- { name: doctrine.event_listener, event: postPersist }
Run Code Online (Sandbox Code Playgroud)
服务(ivory.lucene.search)作为参数传递给我的服务/监听器.
然后在我的班上
protected $lucenemanager;
public function __construct($luceneSearch)
{
$this->lucenemanager = $luceneSearch;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以对$ this使用get方法
尽管不是OO中的最佳实践,但这种方法始终有效
global $kernel;
$assetsManager = $kernel->getContainer()->get('acme_assets.assets_manager');?
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20093 次 |
最近记录: |