如何使带有 PDT 的 Eclipse 与已注册的 Joomla 命名空间别名一起使用?

Grz*_*uze 5 php eclipse joomla eclipse-pdt

我想做的是开始在 Joomla 下工作!在安装了 PHP 开发工具的 Eclipse PHP IDE 中创建项目。我使用 Eclipse Oxygen 进行 PHP 开发并使用 Joomla 3.8.2 项目。

创建项目并导入代码后,我收到有关无法将某些类解析为类型的验证错误。例如:

$par = JComponentHelper::getParams('com_somecomponent');
Run Code Online (Sandbox Code Playgroud)

这给了我一个验证错误:

JComponentHelper 无法解析为类型。

我认为这是因为它JComponentHelper是注册的 Joomla!别名和真实姓名是\Joomla\CMS\Component\ComponentHelper。我如何向 Eclipse 提供这些信息以便能够正确解析命名空间?

Cy *_*nol 3

Joomla 项目已经逐渐将框架的类迁移出全局名称空间,但提供了别名来简化旧项目和扩展的过渡。正如我们所知,Eclipse 无法推断有关这些别名的信息,因为 Joomla 使用 PHP 的class_alias()函数动态生成它们。

从版本 3.8.0 开始,Joomla 提供了一个存根生成器,用于分析框架中的类以创建一个文件,IDE 可以轻松地从中加载缺少的信息:

随着 Joomla 将其核心类从驻留在全局 PHP 命名空间转换为使用命名空间 PHP 类,开发人员在代码仍然使用旧类名的环境中工作将是很常见的情况,而旧类名在较新的 Joomla 版本中可能不存在除了在 PHP 的自动加载器中作为类别名之外。因此,该脚本允许开发人员生成可在本地环境中使用的映射文件,该文件将为别名类名创建“真实”类,并允许 IDE 自动完成等功能正常工作。

我们可以通过从命令提示符或终端运行位于build/目录中的stubGenerator.php实用程序来生成此文件:

php build/stubGenerator.php
Run Code Online (Sandbox Code Playgroud)

...这会在项目的根目录中创建一个stubs.php文件。然后,Eclipse 应该显示别名的内容辅助信息。该文件也适用于其他 IDE,例如 NetBeans 和 PHPStorm。一个小警告:

请注意,此文件将引发一些 IDE 错误,因为它将生成扩展最终类的存根类(PHP 中不允许这样做)。因此,建议禁用对此文件的检查。

不幸的是,我们无法从 PDT 的 PHP 验证中排除单个文件,但如果错误出现,我们可以从“问题”窗口中删除它们,这样可以抑制它们,直到我们重新生成存根文件。


虽然这解决了 Eclipse 中的问题,但我们需要考虑到即将发布的 Joomla 版本将弃用许多要删除的别名,因此我们希望在 Joomla 转向 Composer 和PSR-4 命名空间约定时尽可能避免引用这些别名。

而不是直接使用别名:

$par = JComponentHelper::getParams('com_somecomponent');
Run Code Online (Sandbox Code Playgroud)

...考虑导入该类:

use Joomla\CMS\Component\ComponentHelper; 
...
$par = ComponentHelper::getParams('com_somecomponent');
Run Code Online (Sandbox Code Playgroud)