我正试图为康陶尔创建一个钩子扩展。但康陶尔似乎无法从名称空间加载我的类,该名称空间处理钩子。这是我的文件结构:

我试着改变名字,在课堂上添加".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'); 我得到了错误消息:
试图从命名空间“Memberlevel”加载类"myClass“。您忘了另一个名称空间的"use“语句了吗?
发布于 2019-08-09 14:01:27
您仍然在使用旧的Contao 3加载类的方式。在“康陶尔4”中,你应该使用作曲家的自动调词功能。最近版本的默认composer.json已经包含了用于您的Contao的src/文件夹的自动加载指令:
"autoload": {
"psr-4": {
"App\\": "src/"
}
},使用该方法,您可以以兼容的方式创建并注册一个钩子:
// 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'];从Contao4.8开始,您还可以使用注释注册钩子,从而消除了在app/Resources/contao/config/config.php中注册钩子的需要。
https://stackoverflow.com/questions/57430069
复制相似问题