Sylius - 在新实体中实现Slugable和Timestampable

时间:2016-08-30 14:56:42

标签: php sylius

我尝试使用新的Sylius版本(1.0)创建一些实体。

我正在阅读他们的文档,但我有点生气。

获得了新的实体define("FIREBASE_PRIVATE_KEY","giant_key_goes_here"); token = JWT::encode($payload, FIREBASE_PRIVATE_KEY, 'RS256');

此实体有三个字段,作者标题内容

如何在此实体上使用Slugable和Timestampable在此实体上使用注释创建两个新字段?

我尝试创建一个扩展Slugable和Timestampable接口的接口Book.php,但很明显,Doctrine并没有映射接口的字段。

book.php中

BookInterface.php

解决

使用Gedmo实体特征可以很好地工作。

<?php namespace Acme\SyliusBookBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Sylius\Component\Resource\Model\ResourceInterface; use Gedmo\Mapping\Annotation as Gedmo; /** * Book * * @ORM\Table(name="book") * @ORM\Entity(repositoryClass="App\SyliusBookBundle\Repository\BookRepository") */ class Book implements ResourceInterface { public function __construct() { $this->createdAt = new \DateTime(); } /** * @var int * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var int * * @ORM\ManyToOne(targetEntity="Sylius\Component\User\Model\User") * @ORM\JoinColumn(name="user_id", referencedColumnName="id") */ private $author; /** * @var string * * @ORM\Column(name="content", type="text") */ private $content; /** * @var string * * @ORM\Column(name="title", type="string", length=255) */ private $title;

然后在您的实体类上使用它:

Gedmo\Timestampable\Traits\TimestampableEntity;

2 个答案:

答案 0 :(得分:1)

我认为你无法将注释与Sylius的TimestampableTrait混合在一起。一个更容易的解决方案是定义自己的特征或使用Gedmo提供的特征。

无论如何,为什么要将注释与代码混合?在xml / yaml文件中保留映射会拆分逻辑并使代码更容易理解。在实体内部保留数据库映射也违反了单一责任原则(SOLID原则)。

这里有some reading about it

PS。当你解决了问题时,我正在写它。我会把它放在这里,也许有人会发现这个链接很有用。

答案 1 :(得分:0)

查看Component/Product/Model/Product使用TimestampableTrait的{​​{1}},并使用SlugAwareInterface(通过ProductInterface)。这些接口存储在Component/Resource/Model/文件夹

所以使用特征,并扩展SlugAwareInterface。然后添加必要的slug函数。 getSlug() setSlug()

Interface ProductInterface extends
    AttributeSubjectInterface,
    SlugAwareInterface,
    TimestampableInterface,
    ToggleableInterface,
    ProductTranslationInterface,
    AssociableInterface,
    CodeAwareInterface,
    TranslatableInterface,
    VariableInterface
{