Php Doctrine2自动生成类中的自定义函数
有没有办法扩展Doctrine2从数据库自动生成的类 示例:我有一个由条令生成的用户类Php Doctrine2自动生成类中的自定义函数,php,codeigniter,doctrine-orm,Php,Codeigniter,Doctrine Orm,有没有办法扩展Doctrine2从数据库自动生成的类 示例:我有一个由条令生成的用户类 <?php namespace Entities; /** * User */ class User { /** * @var integer */ private $id; /** * @var string */ private $firstName; /** * @var string
<?php
namespace Entities;
/**
* User
*/
class User
{
/**
* @var integer
*/
private $id;
/**
* @var string
*/
private $firstName;
/**
* @var string
*/
private $lastName;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set firstName
*
* @param string $firstName
*
* @return User
*/
public function setFirstName($firstName)
{
$this->firstName = $firstName;
return $this;
}
/**
* Get firstName
*
* @return string
*/
public function getFirstName()
{
return $this->firstName;
}
/**
* Set lastName
*
* @param string $lastName
*
* @return User
*/
public function setLastName($lastName)
{
$this->lastName = $lastName;
return $this;
}
/**
* Get lastName
*
* @return string
*/
public function getLastName()
{
return $this->lastName;
}
有没有比直接将其添加到此类更干净的方法?
我试图在库中创建另一个类(Test)并对其进行扩展,然后将其添加到autoload中(这正在工作),但在尝试保存对象时出错:
消息:未找到类“Test”的名为“Test.dcm.yml”的映射文件
我在CodeIgniter3中使用Doctrine2
谢谢。如中所述:
EntityGenerator不是解决所有任务的成熟代码生成器。[…]EntityGenerator应该可以启动您,但不能达到100%
在简单的英语中,这意味着您要求Doctrine只生成一次实体文件。在那之后,你可以自己做任何你喜欢(或需要)的改变
因为实体不仅仅是某些属性的容器,而是整个操作发生的地方,这就是流程应该发生的方式,所以条令不能为您编写更多的代码
向条令生成的存根实体添加功能的唯一方法是,通过编写代码来完成生成的类,该代码根据每个实体在域模型中的角色实现其功能
关于另一个问题,在Test
类上,错误消息是不言自明的:传递给EntityManager
进行处理的任何类都需要映射
请查看有关的帮助页面。您可以将类User
映射为(它的作用类似于派生类的模板,其实例不会持久化到数据库中),也可以使用将从User
派生的所有类的实例存储在单个表中(当它们具有相同的属性但行为不同时很有用)
或者,如果您创建类
Test
仅仅是因为您害怕修改由条令生成的代码,那么将您需要的行为放入类User
中,并删除类Test
似乎您在访问用户实体类时遇到了问题。您提到test是一个库类。为什么不尝试从控制器访问用户实体类呢。如果可以这样做,那么可能是测试文件的配置有问题。此外,您需要正确映射您的实体类。您可以在此处查看以了解使用yml的条令映射:您可以这样做:
<?php
namespace Entities;
/**
* User
*/
class User extends Test
{
//... and extends Test
}
注释允许您指定存储库类以向实体类添加更多方法
/**
* @ORM\Entity(repositoryClass="App\Entity\UserRepository")
*/
class User
{
}
class UserRepository extends EntityRepository
{
public function getFullName() {
return $this->getFirstName().' '.$this->getLastname();
}
}
// calling repository method
$entityManager->getRepository('User')->getFullName();
这里有一个链接[
7.8.8.自定义存储库您认为什么比添加一个方法更干净,该方法根据对象的状态向类本身公开信息?存储库设计模式用于持久性,而不是更改类的行为。
<?php
namespace Entities;
/**
* User
*/
class User extends Test
{
//... and extends Test
}
<?php
namespace Entities;
/**
* User
*/
class User
{
//...
public function getFullName() {
return $this->getFirstName().' '.$this->getLastname();
}
}
/**
* @ORM\Entity(repositoryClass="App\Entity\UserRepository")
*/
class User
{
}
class UserRepository extends EntityRepository
{
public function getFullName() {
return $this->getFirstName().' '.$this->getLastname();
}
}
// calling repository method
$entityManager->getRepository('User')->getFullName();