我想实现一个自定义的TYPO3扩展来执行一些php代码。与我的主要班级“你好,世界!” ist已经在工作,我了解名称空间的使用。 但是现在我发现了一个适合我需求的php库。我将lib文件夹粘贴到了扩展程序的“ Classes”文件夹中。但是现在我遇到了找不到类的错误,因为所有的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',
);
但是当我尝试在主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";
}
}
答案 0 :(得分:0)
任何不使用名称空间的PHP类都在顶级名称空间中。所以您可以像这样使用它们:
$mm = new \ServiceMailman('http://localhost', '', '');
您不应将外部库添加到您的Classes
目录中。此目录中的类会自动为您的扩展名(Vendor / ExtensionName)加载正确的名称空间。由于外部库具有不同的名称空间(在您的情况下没有),因此会引起问题。通常,我们将外部库放在Resources/Private/Php/LibraryName
中。然后,您将需要或包含该库。
但是,如果您使用的是composer,最好不要在扩展程序中包含外部库,但是如果可能的话,请让composer担心它。这样,您不必担心自动加载(因此您不需要手动要求或包括任何文件),并且外部库的任何依赖关系也都可以自动解决。要么在全局composer.json中需要该库,要么,如果您通过composer安装了需要它的扩展,则将其添加到扩展的composer.json中。
答案 1 :(得分:0)
如果您正在运行composer
,则有两种方法:
Library/ServiceMailman/
。之后,如果该库不存在名称空间,则将其设置在自动加载部分“ classmap”中的composer.json中。更多:https://getcomposer.org/doc/04-schema.md#classmap(如果库具有名称空间,则应位于自动加载部分“ psr-4”中)如果您没有运行composer
,并且想轻松地将其包含在TYPO3扩展中,那么有一个很好的教程:https://insight.helhum.io/post/148112375750/how-to-use-php-libraries-in-legacy-extensions