Php 类不在命名空间中
我正在尝试为Contao创建一个钩子扩展。 但是Contao似乎无法从处理钩子的名称空间加载我的类。 这是我的文件结构: 我尝试过更改名称,并在类中添加了.php,查阅了教程,但我找不到我做错了什么。我在这个话题上相当缺乏经验,所以我可能遗漏了一些明显的东西 autoload.php 类加载器::addNamespacesarray “成员级别”, ; 注册表PSR-0命名空间 */ 如果类_存在“NamespaceClassLoader”{ NamespaceClassLoader::添加'MemberLevel','system/modules/MemberLevel/Class'; } 如果类_存在“NamespaceClassLoader”{ NamespaceClassLoader::addClassMaparray 'Memberlevels'=>'system/modules/Memberlevels/classes/myClass.php' ; } /* *注册模板 */ TemplateLoader::addFiles[ “cookiebar”=>“系统/模块/成员级别/模板”, ]; config.php $GLOBALS['TL_HOOKS']['outputBackendTemplate'][]=array'Memberlevels\myClass','myOutputBackendTemplate'; 我收到错误消息: 试图从命名空间成员级别加载类myClass。您是否忘记了另一个命名空间的use语句Php 类不在命名空间中,php,contao,Php,Contao,我正在尝试为Contao创建一个钩子扩展。 但是Contao似乎无法从处理钩子的名称空间加载我的类。 这是我的文件结构: 我尝试过更改名称,并在类中添加了.php,查阅了教程,但我找不到我做错了什么。我在这个话题上相当缺乏经验,所以我可能遗漏了一些明显的东西 autoload.php 类加载器::addNamespacesarray “成员级别”, ; 注册表PSR-0命名空间 */ 如果类_存在“NamespaceClassLoader”{ NamespaceClassLoader::添加
您仍然在使用旧的Contao 3加载类的方法。在Contao 4中,您应该使用composer的自动加载功能。最新Contao版本的默认composer.json已包含Contao安装的src/文件夹的自动加载指令:
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
使用它,您可以以兼容Contao 4.4的方式创建和注册钩子:
// src/EventListener/OutputBackendTemplateListener.php
namespace App\EventListener;
class OutputBackendTemplateListener
{
public function onOutputBackendTemplate(string $buffer, string $template): string
{
// Do something
return $buffer;
}
}
从Contao 4.8开始,您还可以使用注释来注册钩子,从而无需在app/Resources/Contao/config/config.php中注册钩子。那么,如果我将Contao 3扩展复制到Contao 4.4系统中,它们就不起作用了?我认为他们是相容的。至少在挂钩方面。我添加了composer.json,但唯一的变化是,错误现在显示在日志中,而不是在后端显示错误。我没有说Contao 3扩展在Contao 4中不起作用。我只是说你还在用老办法,我给你介绍了推荐的办法;啊,我明白了。但是你不知道问题到底是什么?问题可能是,你正在使用NamespaceClassLoader。如果您仍然希望像contao3那样加载类,那么您可能必须在不使用NamespaceClassLoader扩展的情况下进行加载,除非您也安装了它——无论如何,我不建议这样做。
// app/Resources/contao/config/config.php
$GLOBALS['TL_HOOKS']['outputBackendTemplate'][] = [\App\EventListener\OutputBackendTemplateListener::class, 'onOutputBackendTemplate'];