Class 不在命名空间中

Class not in namespace

我正在尝试为 Contao 创建挂钩扩展。 但是 Contao 似乎无法从处理挂钩的命名空间加载我的 class。 这是我的文件结构:

我试过更改名称并在 class 中添加“.php”,查阅了教程,但我找不到我做错了什么。我对这个话题相当缺乏经验,所以我可能遗漏了一些明显的东西。

autoload.php

ClassLoader::addNamespaces(array 
    ( 
        'Memberlevels', 
    )); 

gister PSR-0 namespace 
 */ 
if (class_exists('NamespaceClassLoader')) { 
    NamespaceClassLoader::add('Memberlevels', 'system/modules/memberlevels/classes'); 
} 


if (class_exists('NamespaceClassLoader')) { 
    NamespaceClassLoader::addClassMap(array 
        ( 

            'Memberlevels'                => 'system/modules/memberlevels/classes/myClass.php' 
        )); 
} 

/* 
 * Register the templates 
 */ 
TemplateLoader::addFiles([ 
    'cookiebar' => 'system/modules/memberlevels/templates', 
]);  

config.php

$GLOBALS['TL_HOOKS']['outputBackendTemplate'][] = array('Memberlevels\myClass', 'myOutputBackendTemplate');  

我收到错误消息:

Attempted to load class "myClass" from namespace "Memberlevels". Did you forget a "use" statement for another namespace?

您仍在使用旧的 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;
    }
}
// app/Resources/contao/config/config.php

$GLOBALS['TL_HOOKS']['outputBackendTemplate'][] = [\App\EventListener\OutputBackendTemplateListener::class, 'onOutputBackendTemplate'];

从Contao 4.8开始你也可以使用注解来注册一个钩子,省去了在app/Resources/contao/config/config.php.

中注册钩子的需要