【问题标题】:Namespaces and External Librairies in PHP5.3 - Doctrine integrationPHP5.3 中的命名空间和外部库 - 原则集成
【发布时间】:2012-12-02 20:28:50
【问题描述】:

我想将 Doctrine 集成到一个新构建的 PHP5 框架中。我正在使用命名空间。图书馆按地图组织:

  • 应用程序(控制器、块、动作……)

  • ext(外部库)

  • sys(内核和路由对象)。

现在我想整合地图分机中的 Doctrine。

在我的调用类中:

namespace app\example;
use ext\Doctrine\DBAL\DriverManager;
$conn = DriverManager::getConnection($connectionParams, $config);

为了完成这项工作,我需要将 Doctrine 中的每个命名空间引用更改为例如:

namespace ext\Doctrine\DBAL;
use ext\Doctrine\Common\EventManager;

在我看来,这是一个非常不雅的解决方案。

问题: 有没有办法不改变 Doctrine 命名空间? 有没有更好的策略来处理外部库?

【问题讨论】:

  • 您通常不是通过具体的命名空间定义而是告诉(自动)加载程序在哪里可以找到学说来进行映射。但是,你没有问任何具体的问题,你只是在描述你碰壁的地方。我会质疑你的整体处理,只是说,看起来你做错了(在一个好的意思上,请不要感到被冒犯,只是指出你应该寻找其他方法来做你想做的事做)。
  • 我没有被冒犯,不用担心。我知道我错过了一些东西。这确实是我正在寻找的正确选择。我将研究自动加载器策略。现在谢谢。

标签: php namespaces doctrine integration


【解决方案1】:

更好的策略是使用库提供的命名空间。改变这一点是非常不寻常的。

我猜你的主要问题实际上是因为自动加载。请记住,命名空间和目录不必相同。

只需让您的自动加载器更智能一点,即可在 ext.js 中查找外部库。您可以保留一个小的名称空间注册表,您可以在那里找到。

更好的是,开始使用composer。

【讨论】:

  • 这实际上是我所做的。在自动加载器中,所有不以 app、ext 或 sys 开头的文件都获得前缀 ext/。使用 Doctrine\Something + new Something() 将导致 ext/Doctrine/Something.php 自动加载。作曲家策略是我稍后会考虑的。谢谢!
猜你喜欢
  • 2013-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多