2012-05-20 77 views
2

我遇到了一個奇怪的問題,試圖在silex中使用doctrine2擴展sluggable和timestampable。使用doctrine2 sluggable擴展與silex

首先我succeded與硅石使用doctrine2本指南以下內容:

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

之後,使用該另一方的導向,我已經加sluggable和timestampable監聽到我的實體管理器:

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

現在在我的實體我有這樣的問題:

如果我使用類似的東西:

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

/** 
* @ORM\Entity 
*/ 

doctrine2不承認我的實體,我需要使用:

@Entity而不是@ORM\Entity

但是,如果使用@ORM\Entity gedmo似乎工作,但他說我找不到可延遲或時間戳字段(修改,創建等),如果我運行orm:generate-entities doctrine2,找不到我的實體。

如果我使用的@Entity代替@ORM\Entity everithing做工精細,但當我添加gedmo註釋,如:

use Gedmo\Mapping\Annotation as Gedmo; 

@Gedmo\Timestampable(on="create") 

實體給我的錯誤對正常的註解像@Column(type="datetime")

我認爲唯一的方式是使用前綴@ORM\就像我在互聯網上找到的每個示例一樣,但是使用此前綴orm:generate-entities停止查找我的實體。

在Symfony2中我沒有這個問題,我使用@ORM\前綴和doctrine2擴展sluggable和timestampable就像一個魅力,我碰到這個問題,使用Silex的,有沒有原生支持doctrine2 ORM,只有DBAL,所以我用以下提供者使用nutwerk-orm-extension

如果你們有一些想法,請與我分享。

回答

3

您是否在作曲家中添加了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; 
+0

非常有幫助謝謝。我還發現使用traits更容易'使用TimestampableEntity;'而不需要'* @HasLifecycleCallbacks()'也適用於我需要的多個數據庫'$ app ['dbs。event_manager'] ['default'] - > addEventSubscriber(new \ Gedmo \ Timestampable \ TimestampableListener());' – gadelkareem