2

silex で sluggable および timestampable な doctrine2 拡張機能を使用しようとすると、奇妙な問題が発生します。

まず第一に、このガイドに従って silex で doctrine2 を使用することに成功しました:

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
 */

doctrine2 は私のエンティティを認識しません。使用する必要があります:

@Entityそれ以外の@ORM\Entity

しかし、私が@ORM\Entitygedmo を使用すると動作するように見えますが、彼はスラッグ可能なフィールドまたはタイムスタンプ可能なフィールド (変更、作成など) を見つけることができず、orm:generate-entities doctrine2 を実行するとエンティティが見つからないと言っていました。

everithing@Entityの代わりに使用すると問題なく動作しますが、次のような gedmo 注釈を追加すると:@ORM\Entity

use Gedmo\Mapping\Annotation as Gedmo;

@Gedmo\Timestampable(on="create")

エンティティは、次のような通常の注釈に関するエラーを表示しました@Column(type="datetime")

@ORM\唯一の方法は、インターネットで見つけたすべての例のようにプレフィックスを使用することだと思いますが、このプレフィックスを使用するとorm:generate-entities、エンティティの検索が停止します。

symfony2 では、私はこの問題を抱えていません。@ORM\プレフィックスと doctrine2 拡張機能を sluggable でタイムスタンプ可能なものをチャームのように使用しています。Silex を使用してこの問題に遭遇しました。この問題は、doctrine2 orm へのネイティブ サポートがなく、dbal のみであるため、次のプロバイダーを使用して使用しますNutwerk-orm-extension

アイデアがあれば、私と共有してください。

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 に答える