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
.
中注册钩子的需要
我正在尝试为 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
.