我尝试使用新的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;
答案 0 :(得分:1)
我认为你无法将注释与Sylius的TimestampableTrait
混合在一起。一个更容易的解决方案是定义自己的特征或使用Gedmo提供的特征。
无论如何,为什么要将注释与代码混合?在xml / yaml文件中保留映射会拆分逻辑并使代码更容易理解。在实体内部保留数据库映射也违反了单一责任原则(SOLID原则)。
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
{