Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Doctrine2自动生成类中的自定义函数_Php_Codeigniter_Doctrine Orm - Fatal编程技术网

Php 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

有没有办法扩展Doctrine2从数据库自动生成的类

示例:我有一个由条令生成的用户类

<?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();