gpt4 book ai didi

php - 如何在 Symfony 2.7 项目中激活 Gedmo Ip_Traceable?

转载 作者:搜寻专家 更新时间:2023-10-31 20:36:23 24 4
gpt4 key购买 nike

在我的 Symfony 2.7 项目中,我使用 StofDoctrineExtension‐Bundle .我已经宣布了一些实体。他们使用 Timestampable、Loggable 和 Sluggable Gedmo 行为。我通过阅读 this tutorial 安装了它, 在官方 Symfony 文档中。当我通过 Sonata Admin 或我自己的用例创建一些实体时,它工作得很好。

现在我想使用 Gadmo IpTraceable 行为。我通过添加两个属性 ipCreatoripUdater 更改了我的实体声明 ORM YAML 文件:

AppBundle\Entity\Vote:
type: entity
table: te_vote_vot
id:
id:
type: bigint
column: vot_id
generator:
strategy: AUTO
options:
unsigned: true
comment: Identifiant du classement
fields:
created:
type: datetime
nullable: false
column: vot_creation
options:
comment: Creation date
gedmo:
timestampable:
on: create
ipCreator:
type: string
length: 45
nullable: true
column: vot_ip_creator
options:
comment: IP du voteur
gedmo:
ipTraceable:
on: create
ipUpdater:
type: string
length: 45
nullable: true
column: vot_ip_updater
options:
comment: IP du voteur en cas de modification
gedmo:
ipTraceable:
on: update
tracker:
type: guid
nullable: false
column: vot_tracker
options:
comment: Tracker GGUID du voteur
point:
type: smallint
nullable: false
column: vot_point
options:
comment: Nombre de point que rapporte ce vote
[...]

时间戳行为被称为 created 属性已经很好地初始化,但是 ipCreator 不是并且保持 null !

为了激活 Timestampable,我在 config.yml 文件中添加了一些行。

stof_doctrine_extensions:
default_locale: fr_FR
orm:
default:
timestampable: true
sluggable: true
loggable: true

我尝试添加 iptraceable: trueipTraceable: trueip_traceable: true。它不起作用 iptraceable、ipTraceable、ip_traceable 不是配置项。

我查看了 DependancyInjection/Configuration.php源文件。

$node
->useAttributeAsKey('id')
->prototype('array')
->children()
->scalarNode('translatable')->defaultFalse()->end()
->scalarNode('timestampable')->defaultFalse()->end()
->scalarNode('blameable')->defaultFalse()->end()
->scalarNode('sluggable')->defaultFalse()->end()
->scalarNode('tree')->defaultFalse()->end()
->scalarNode('loggable')->defaultFalse()->end()
->scalarNode('sortable')->defaultFalse()->end()
->scalarNode('softdeleteable')->defaultFalse()->end()
->scalarNode('uploadable')->defaultFalse()->end()
->scalarNode('reference_integrity')->defaultFalse()->end()
->end()
->end()
;

这些词中没有一个激活 IPTraceable 行为。 ipCreator 属性保持为空。我正在搜索一段时间,阅读文档,在网上搜索。而且我找不到任何解决方案。

但是in documentation ,我读到这一行:

IpTraceable is not yet available as Bundle for Symfony2, together with all other extensions.

我的英语不是很流利,但我知道我添加是为了“手动”激活它,而不是像 Bundle。但我不知道该怎么做。

我如何使用这个 IpTracable Doctrine Extensions?

最佳答案

方法一:使用事件订阅者

正如@Ilya 所建议的,我尝试使用像 symfony documentation 中的事件订阅者.

但是很难配置服务,因为我使用的是yml。

所以这是 services.xml 的 yaml 版本文件:

#app/config/services.yml
gedmo_doctrine_extensions.listener.ip_traceable:
class: Gedmo\IpTraceable\IpTraceableListener
public: false
tags:
- { name: doctrine.event_subscriber, connection: default }
calls:
- [setAnnotationReader, [ "@annotation_reader"]]

alterphp_doctrine_extensions.event_listener.ip_trace:
class: %alterphp_doctrine_extensions.event_listener.ip_trace.class%
scope: request
arguments:
- @gedmo_doctrine_extensions.listener.ip_traceable
- @?request
tags:
- { name: kernel.event_subscriber}

方法二:WAITING合并 Pull-Request #233

自 2014 年 3 月以来,有一个 pull-request #233添加对 IpTraceable Gedmo 扩展的支持。您可以等待 pull-request 与 master 合并。不幸的是,@stof 似乎没有时间做这个项目。我不知道什么时候会完成。

方法 3:使用 AlterPHP fork !

您可以从 composer.json 中删除 Stof/StofDoctrineExtensions 并使用 alterphp fork

不要忘记调用 iptraceable-listener 分支!

您必须通过编辑您的 app/config/config.yml 文件来激活 ip_traceable 订阅者

stof_doctrine_extensions:
orm:
default:
ip_traceable: true

例如,这是我的 config.yml 文件:

stof_doctrine_extensions:
default_locale: fr_FR
orm:
default:
timestampable: true
sluggable: true
loggable: true
ip_traceable: true

我尝试了方法 1 和 2,两者都非常有效。 (但当然不在一起)。

所以选择你的 ;)

关于php - 如何在 Symfony 2.7 项目中激活 Gedmo Ip_Traceable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34006801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com