Php Sylius-在新实体中实现slagable和timestable
我试图用新的Sylius版本(1.0)创建一些实体 我在看他们的文件,但我有点生气了 获得了一个新实体Php Sylius-在新实体中实现slagable和timestable,php,sylius,Php,Sylius,我试图用新的Sylius版本(1.0)创建一些实体 我在看他们的文件,但我有点生气了 获得了一个新实体Book.php 该实体有三个字段,作者,标题和内容 如何使用该实体上的slagable和timestable来使用注释在该实体上创建两个新字段 我尝试创建一个接口BookInterface.php,它扩展了slagable和timestable接口,但显然,条令没有映射接口的字段 Book.php <?php namespace Acme\SyliusBookBundle\Entity
Book.php
该实体有三个字段,作者,标题和内容
如何使用该实体上的slagable和timestable来使用注释在该实体上创建两个新字段
我尝试创建一个接口BookInterface.php
,它扩展了slagable和timestable接口,但显然,条令没有映射接口的字段
Book.php
<?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;
查看
组件/产品/模型/产品
它使用时间标签特征
,并使用SlugAwareInterface
(通过产品界面
)。这些接口存储在组件/Resource/Model/
文件夹中
因此,使用trait并扩展SlugAwareInterface
。然后添加必要的slug函数<代码>getSlug()setSlug()
我认为您不能将注释与Sylius的
TimestableTracit
混合使用。一个更简单的解决方案是定义自己的特性或使用Gedmo提供的特性
无论如何,为什么要将注释与代码混合使用?将映射保存在xml/yaml文件中会分裂逻辑,使代码更易于理解。将数据库映射保留在实体内也违反了一个单一的责任原则(可靠原则)
给你
顺便说一句,当你解决了你的问题时,我正在写它。我将把它留在这里,也许有人会发现这个链接很有用 我不知道Sylius,但你为什么不写:
/**@var\DateTime@Gedmo\timestable(on=“update”)…*/更新了私人文件$时间戳的代码>和/**@var string@Gedmo\Slug(字段={“name”})私人$slug
对于slug?感谢您的回复@lolmx,但我尝试了解Sylius的良好实践:)是的,我看到了,但Sylius使用TimestableTrait并将这些字段映射到XML中,它可以映射注释中的createdAt和updatedAt字段?我认为关于您的问题的评论是使用注释的正确答案。xml版本使用Yes,但对于注释,我需要重新定义类变量,它会抛出一个错误:>Entity\Post和Gedmo\Timestable\Traits\Timestable在Entity\Book的组合中定义相同的属性($createdAt)。但是,定义不同,被认为是不兼容的。我找到了解决方案,就在这个问题上加了它。谢谢大家!
class Post implements ResourceInterface
{
use TimestampableEntity;
Interface ProductInterface extends
AttributeSubjectInterface,
SlugAwareInterface,
TimestampableInterface,
ToggleableInterface,
ProductTranslationInterface,
AssociableInterface,
CodeAwareInterface,
TranslatableInterface,
VariableInterface
{