Php 在Zend Framework 2中为同一命名空间使用两个不同的目录-如何?
我有ZF2模块,同时我使用托管在Php 在Zend Framework 2中为同一命名空间使用两个不同的目录-如何?,php,namespaces,zend-framework2,propel,autoload,Php,Namespaces,Zend Framework2,Propel,Autoload,我有ZF2模块,同时我使用托管在根目录/生成类中的Prope泛型模型。我可以让它们共享相同的名称空间吗?比如书店等等 从Zend\Loader\StandardAutoloader我看到: public function registerNamespace($namespace, $directory) { $namespace = rtrim($namespace, self::NS_SEPARATOR) . self::NS_SEPARATOR; $this->name
根目录/生成类中的Prope泛型模型。我可以让它们共享相同的名称空间吗?比如书店
等等
从Zend\Loader\StandardAutoloader
我看到:
public function registerNamespace($namespace, $directory)
{
$namespace = rtrim($namespace, self::NS_SEPARATOR) . self::NS_SEPARATOR;
$this->namespaces[$namespace] = $this->normalizeDirectory($directory);
return $this;
}
因此,如果我在Module.php
中提供两个目录,最后一个将占上风
还有:
public function setFallbackAutoloader($flag)
{
$this->fallbackAutoloaderFlag = (bool) $flag;
return $this;
}
我可以求助于它吗?我如何利用这个选项?还有其他(更好的)选择吗?我不会将我的模型直接放在/your application/root
中。这将违反ZF2推荐的目录脚手架。相反,我将创建一个/FooModule/src/FooModule/Model
目录,并使用Model类中的名称空间FooModule\Model
名称空间定义将我的所有模型放在此文件夹中
另一个细节是;试图为同一名称空间指向两个不同的目录绝对是个坏主意。这将与许多开源库和框架相抵触,包括严重依赖于此标准的Zend Framework 2
我会从另一个角度看待这个问题。只需问:为什么我需要将一个名称空间指向两个不同的目录
我想实际上你指的是领域实体“推进生成模型”。如果这是正确的(我的意思是书店
),那么它是一个模型,而不是一个模型。你可能还想读书
因此,您可以尝试在应用程序
(或其他)ZF2模块中创建一个实体
名称空间,并在其中的子名称空间下编写实体类。这是完全正确的。例如:
Application\src\Entity\Bookstore.php - namespace is Application\Entity
Application\src\Entity\Book.php - namespace is Application\Entity
Application\src\Entity\Author.php - namespace is Application\Entity
或者这也是一个有效的场景(书店是一个模块):
在这两个示例场景中,Book.php
和Author.php
是您自动生成的域实体,它们共享相同的名称空间,同时不会与ZF2或PSR-4自动加载机制冲突。thnx!我使用Prope的时间很少,所以在找不到任何配置选项来更改输出的目标文件夹后,我决定通过自动加载“black magic”将“symlink”生成的类转换为ZF2目录脚手架。到目前为止,这就是埃罗纽斯。幸运的是,有一个很棒的[--output dir=“…”]
选项受命令行推进模型:build
顺便说一句,ZF2支持一个模块的多个名称空间,因此-它不应该分别是Application/src/**Application**/Entity/Book.php和Bookstore/src/**Bookstore**/Entity/Book.php吗?
Bookstore\src\Entity\Book.php - namespace is Bookstore\Entity
Bookstore\src\Entity\Author.php - namespace is Bookstore\Entity