Tôi đã theo dõi this example để kiểm tra tiện ích mở rộng softdeletable
trên dự án của tôi đang chạy Symfony 2.1.0-DEV.Trình nghe "SoftDeleteableListener" chưa được thêm vào EventManager
tôi cấu hình config.yml tôi như dưới đây:
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"
controller action của tôi:
/**
* @Route("/del", name="del_article")
*/
public function delAction() {
$em = $this->getDoctrine()->getEntityManager();
$article = $em->find('Article', 3);
$em->remove($article);
$em->flush();
die('ok');
}
Khi tôi chạy mã, nó luôn luôn hiển thị các ngoại lệ: Listener "SoftDeleteableListener" was not added to the EventManager!
Sau khi một số dành thời gian với gỡ lỗi, tôi thấy rằng lớp SoftDeleteableFilter
có chức năng 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;
}
Tuy nhiên $listeners
tài sản không có SoftDeleteableListener
mục, nhưng nó có nghe khác, chẳng hạn như
- Gedmo \ Tree \ TreeListener
- Gedmo \ Sortable \ SortableListener
- Gedmo \ Sluggable \ SluggableListener
- Gedmo \ Loggable \ LoggableListener
- Gedmo \ Timestampable \ TimestampableListener
- Gedmo \ Translatable \ TranslatableListener
Được tạo từ loadClassMetadata. Tôi nghĩ rằng nó có thể tạo ra từ tôi nghe dịch vụ doctrine_extensions.yml:
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 ] ]
Vì vậy, tôi cố gắng thêm sau:
gedmo.listener.softdeleteable:
class: Gedmo\SoftDeleteable\SoftDeleteableListener
tags:
- { name: doctrine.event_subscriber, connection: default }
calls:
- [ setAnnotationReader, [ @annotation_reader ] ]
Nhưng nó vẫn cho thấy Listener "SoftDeleteableListener" was not added to the EventManager!
Tôi có cần phải thêm một người biết lắng nghe trường hợp của SoftDeleteableListener?
Liên kết với vấn đề github không hoạt động nữa – mandark
@mandark cập nhật – aur1mas
tôi "của router Symfony \ Component \ YAML \ Exception \ ParseException: Chỉ dành riêng "@" không thể bắt đầu một đồng bằng vô hướng; bạn cần báo giá vô hướng ", tôi phải báo giá: [" @annotation_reader "] –