this exampleに続き、私のプロジェクトでSymfony 2.1.0-DEVを実行しているsoftdeletable
の拡張機能をテストしました。Listener "SoftDeleteableListener"がEventManagerに追加されていません
私は以下のように私のconfig.ymlを設定した:
orm:
auto_generate_proxy_classes: %kernel.debug%
auto_mapping: true
filters:
softdeleteable:
class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter
enabled: true
mappings:
translatable:
type: annotation
alias: Gedmo
prefix: Gedmo\Translatable\Entity
# make sure vendor library location is correct
dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity"
loggable:
type: annotation
alias: Gedmo
prefix: Gedmo\Loggable\Entity
dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Loggable/Entity"
tree:
type: annotation
alias: Gedmo
prefix: Gedmo\Tree\Entity
dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Tree/Entity"
私のコントローラのアクションを:私は、コードを実行すると
/**
* @Route("/del", name="del_article")
*/
public function delAction() {
$em = $this->getDoctrine()->getEntityManager();
$article = $em->find('Article', 3);
$em->remove($article);
$em->flush();
die('ok');
}
、それは常に例外を示しています。いくつかの後Listener "SoftDeleteableListener" was not added to the EventManager!
をデバッグに費やされた時間、私はクラスSoftDeleteableFilter
が機能を持っていることを発見しましたgetListener()
:
protected function getListener()
{
if ($this->listener === null) {
$em = $this->getEntityManager();
$evm = $em->getEventManager();
foreach ($evm->getListeners() as $listeners) {
foreach ($listeners as $listener) {
if ($listener instanceof SoftDeleteableListener) {
$this->listener = $listener;
break 2;
}
}
}
if ($this->listener === null) {
throw new \RuntimeException('Listener "SoftDeleteableListener" was not added to the EventManager!');
}
}
return $this->listener;
}
しかし$listeners
プロパティはSoftDeleteableListener
アイテムを持っていませんが、それは、そのような
- Gedmo \木\ TreeListener
- Gedmo \ソート可能\ SortableListener
- Gedmo \コードはSluggable \ SluggableListener など、他のリスナーを、持っています
- Gedmo \ Loggable \ LoggableListener
- Gedmo \ Timestampable \ TimestampableListener
- Gedmo \翻訳可能\ TranslatableListener loadClassMetadataから生成され
。だから私は、以下を追加しようとしました
services:
extension.listener:
class: Infinitz\UserBundle\Listener\DoctrineExtensionListener
calls:
- [ setContainer, [ @service_container ] ]
tags:
- { name: kernel.event_listener, event: kernel.request, method: onLateKernelRequest, priority: -10 }
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
gedmo.listener.tree:
class: Gedmo\Tree\TreeListener
tags:
- { name: doctrine.event_subscriber, connection: default }
calls:
- [ setAnnotationReader, [ @annotation_reader ] ]
gedmo.listener.translatable:
class: Gedmo\Translatable\TranslatableListener
tags:
- { name: doctrine.event_subscriber, connection: default }
calls:
- [ setAnnotationReader, [ @annotation_reader ] ]
- [ setDefaultLocale, [ %locale% ] ]
- [ setTranslationFallback, [ false ] ]
gedmo.listener.timestampable:
class: Gedmo\Timestampable\TimestampableListener
tags:
- { name: doctrine.event_subscriber, connection: default }
calls:
- [ setAnnotationReader, [ @annotation_reader ] ]
gedmo.listener.sluggable:
class: Gedmo\Sluggable\SluggableListener
tags:
- { name: doctrine.event_subscriber, connection: default }
calls:
- [ setAnnotationReader, [ @annotation_reader ] ]
gedmo.listener.sortable:
class: Gedmo\Sortable\SortableListener
tags:
- { name: doctrine.event_subscriber, connection: default }
calls:
- [ setAnnotationReader, [ @annotation_reader ] ]
gedmo.listener.loggable:
class: Gedmo\Loggable\LoggableListener
tags:
- { name: doctrine.event_subscriber, connection: default }
calls:
- [ setAnnotationReader, [ @annotation_reader ] ]
:私はそれが私のdoctrine_extensions.ymlサービスリスナーから生成するかもしれないと思う
gedmo.listener.softdeleteable:
class: Gedmo\SoftDeleteable\SoftDeleteableListener
tags:
- { name: doctrine.event_subscriber, connection: default }
calls:
- [ setAnnotationReader, [ @annotation_reader ] ]
しかし、それはまだ
Listener "SoftDeleteableListener" was not added to the EventManager!
を示し、私はリスナーを追加する必要がありますかどのインスタンスのSoftDeleteableListener?私の不注意について申し訳ありません
githubの問題へのリンクはもう – mandark
が@mandark私が得た「予約されたインジケータをキャッチされないのSymfony \コンポーネント\ YAML \例外の\はParseException』 – aur1mas
を更新動作しません:YMLはsoftdeleteリスナーを有効にしますプレーンスカラー;スカラーを引用する必要がある」と、私は引用しなければならなかった:["@annotation_reader"] –