Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 类不在命名空间中_Php_Contao - Fatal编程技术网

Php 类不在命名空间中

Php 类不在命名空间中,php,contao,Php,Contao,我正在尝试为Contao创建一个钩子扩展。 但是Contao似乎无法从处理钩子的名称空间加载我的类。 这是我的文件结构: 我尝试过更改名称,并在类中添加了.php,查阅了教程,但我找不到我做错了什么。我在这个话题上相当缺乏经验,所以我可能遗漏了一些明显的东西 autoload.php 类加载器::addNamespacesarray “成员级别”, ; 注册表PSR-0命名空间 */ 如果类_存在“NamespaceClassLoader”{ NamespaceClassLoader::添加

我正在尝试为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语句


您仍然在使用旧的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'];