【发布时间】:2019-05-02 09:19:56
【问题描述】:
我很想实现一个自定义的 TYPO3 扩展来执行一些 php 代码。与我的主要课程“你好世界!”它已经在工作,我了解名称空间的使用。 但是现在我找到了一个适合我需要的 php 库。我将 lib 文件夹粘贴到我的扩展程序的“类”文件夹中。但现在我收到类未找到错误,因为所有 lib 类都没有命名空间。
不幸的是,我找不到任何关于如何在为每个类动态添加命名空间的同时将库添加到typo3 扩展的教程/文档。我试图用命名空间覆盖每个类,但不知何故这不是解决方案
这是我的 Main 类的一个示例,它正在工作,但是当我尝试调用“ServiceMailman”时,我得到了命名空间错误,好吧,因为它们没有
namespace Htwg\GiMailman;
require_once 'Service/ServiceMailman.php';
class GiMailman{
public function getMailinglists() {
$mm = new ServiceMailman('http://localhost', '', '');
}
}
我正在寻找一种将 php 库添加到“Classes”文件夹的方法,而无需为每个库类添加命名空间。
更新: 我将库安装在外部路径上,并将其添加到 classmap 条目中的 composer.json:
"autoload": {
"psr-4": {
"Htwg\\GiMailman\\": "Classes/"
},
"classmap": ["/opt/lampp/lib/php/Services"]
}
它会显示在 autoload_classmap.php 中:
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
...
'Services_Mailman' => $baseDir . '/../../../../lib/php/Services/Mailman.php',
'Services_Mailman_Exception' => $baseDir . '/../../../../lib/php/Services/Mailman/Exception.php',
);
但是当我尝试在我的 Main php 类中对该类进行分类时,它仍然找不到:
namespace Htwg\GiMailman;
//require_once 'Services/Mailman.php';
class GiMailman{
public function getMailinglists() {
$mm = new \Service_Mailman('http://localhost:8001/3.1', '', 'password');
return "getMailinglists";
}
}
【问题讨论】:
-
您在哪里配置了自动加载器以了解这个新库? Typo 不使用 Composer 之类的东西来处理此类问题吗?那个新库的命名空间是什么?
-
@NicoHaase 我在哪里可以配置自动加载器来添加这些类?我如何告诉 Composer 将此库添加到我的扩展中?库本身来自 pear.php.net
-
我不知道那个扩展,你也没有提供它的名字,但是你应该寻找一个包含它的 Composer 包,或者将它安装为一个已安装的 PEAR 包,使用包管理器
-
抱歉不清楚:这是我想在“类”文件夹中使用的库:github.com/pear/Services_Mailman 有没有办法用 composer 安装它?
-
您确定要使用它吗?四年多以来,它仍处于测试阶段且无人维护
标签: php composer-php typo3 content-management-system autoload