代码之家  ›  专栏  ›  技术社区  ›  Roshan Budhathoki

如何在Zend Framework 3中自动加载继承的条令实体?

  •  0
  • Roshan Budhathoki  · 技术社区  · 7 年前
    <?php
    namespace MyProject\Model;
    
    /**
     * @Entity
     * @InheritanceType("SINGLE_TABLE")
     * @DiscriminatorColumn(name="discr", type="string")
     * @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
     */
    class Person
    {
        // ...
    }
    
    /**
     * @Entity
     */
    class Employee extends Person
    {
        // ...
    }
    

    如何定义上述实体继承的自动加载?或者我们可以将每个实体放在单独的文件中,例如实体\人。php,员工\人。php?

    1 回复  |  直到 7 年前
        1
  •  1
  •   gsc    7 年前

    如果你想让你的项目与(例如)兼容,你应该把每个PHP类放在它自己的文件中 PSR-4 (Autoloader) .

    引用PSR-4规范:

    1. 加载与完全限定类名对应的文件时

      1. 在完全限定的类名(一个–̜名称空间前缀–̝)中,一个或多个前导名称空间和子名称空间名称(不包括前导名称空间分隔符)的连续序列对应于至少一个–基目录–Ì。
      2. “名称空间前缀”后面的连续子名称空间名称对应于“基本目录”中的子目录,其中名称空间分隔符表示目录分隔符。子目录名称必须与子命名空间名称的大小写匹配。
      3. 终止类名对应于以结尾的文件名 .php . 文件名必须与终止类名的大小写匹配。

    所以,如果你创建一个类 Person 在里面 MyProject\Model 命名空间中,自动加载程序只能在 …/Model/Person.php 文件和一个 Employee 课程必须单独进行 …/Model/Employee.php 文件以供自动加载器使用。