2

我遇到了一个奇怪的问题,试图在 silex 中使用 sluggable 和 timestampable 的学说 2 扩展。

首先,按照本指南,我已经成功地将教义2与silex一起使用:

http://martinsikora.com/silex-doctrine2-orm

之后,使用这个其他指南,我向我的实体管理器添加了 sluggable 和带时间戳的侦听器:

http://silex-doctrine-extensions.readthedocs.org/en/latest/doctrine.html

现在在我的实体中,我遇到了这个问题:

如果我使用类似的东西:

use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */

学说2不认识我的实体,我需要使用:

@Entity代替@ORM\Entity

但是,如果我使用@ORM\Entitygedmo 似乎可以工作,但他说他找不到 sluggable 或时间戳字段(修改、创建等),并且如果我运行 orm:generate-entities 学说 2,则找不到我的实体。

如果我使用@Entity而不是@ORM\Entity一切都可以正常工作,但是当我添加 gedmo 注释时,例如:

use Gedmo\Mapping\Annotation as Gedmo;

@Gedmo\Timestampable(on="create")

实体给了我关于正常注释的错误,比如@Column(type="datetime")

我认为唯一的方法是@ORM\像我在互联网上找到的每个示例一样使用前缀,但是使用此前缀orm:generate-entities停止查找我的实体。

在 symfony2 中我没有这个问题,我使用@ORM\前缀和学说 2 扩展 sluggable 和时间戳,就像一个魅力,我使用 Silex 遇到了这个问题,它没有对学说 2 orm 的本机支持,只有 dbal,所以我使用以下提供程序来使用nutwerk-orm-扩展

如果你们有什么想法,请与我分享。

4

1 回答 1

4

您是否在 composer 中添加了 Gedmo 命名空间?

{
    "autoload": {
        "psr-0": {
            "Gedmo": "vendor/gedmo/doctrine-extensions/lib'"
        },
}

我将此扩展与 Silex 一起使用:

https://github.com/dflydev/dflydev-doctrine-orm-service-provider

我添加提供者和订阅者:

//Setting Doctrine ORM
$app->register(new Dflydev\Silex\Provider\DoctrineOrm\DoctrineOrmServiceProvider, array(
    "orm.proxies_dir" => $app['db.orm.proxies_dir'],
    "orm.em.options" => array(
        "mappings" => array(
            array(
                "type" => "annotation",
                "namespace" => "Entity",
                "path" => 'my_path',
            )
        ),
    ),
));

//Setting Doctrine2 extensions

$timestampableListener = new \Gedmo\Timestampable\TimestampableListener();
$app['db.event_manager']->addEventSubscriber($timestampableListener);

它对我有用,但我必须在我的实体中添加这些“用途”:

namespace Entity;

use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping\Id;
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\GeneratedValue;

/**
 * EntityPages
 *
 * @Table(name="pages")
 * @Entity(repositoryClass="Entity\Repository\PagesRepository")
 * @HasLifecycleCallbacks()
 */
class EntityPages
{
    /**
     * @var integer
     *
     * @Column(name="id", type="integer", precision=0, scale=0, nullable=false, unique=false)
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     */
    private $id;
于 2013-01-11T09:37:26.690 回答