Saya mencoba membuat ekstensi kait untuk Contao. Tetapi Contao tampaknya tidak dapat memuat kelas saya dari namespace, yang menangani hook. Ini adalah struktur file saya:

Saya telah mencoba mengubah nama dan menambahkan ".php" ke kelas, mencari tutorial, tetapi saya tidak dapat menemukan apa yang saya lakukan salah. Saya cukup berpengalaman dalam topik ini, jadi saya mungkin melewatkan sesuatu yang jelas.

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');  

Saya mendapatkan pesan kesalahan:

Mencoba memuat kelas "myClass" dari namespace "Memberlevels". Apakah Anda lupa pernyataan "gunakan" untuk namespace lain?

0
Bladerxdxi 9 Agustus 2019, 15:27

1 menjawab

Jawaban Terbaik

Anda masih menggunakan cara lama Contao 3 memuat kelas. Di Contao 4, Anda harus menggunakan fitur autoloading dari composer. composer.json default dari versi Contao terbaru sudah menyertakan perintah pemuatan otomatis untuk folder src/ penginstalan Contao Anda:

"autoload": {
    "psr-4": {
        "App\\": "src/"
    }
},

Dengan menggunakan itu, ini adalah cara Anda membuat & mendaftarkan hook dengan cara yang kompatibel dengan 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'];

Dimulai dengan Contao 4.8 Anda juga dapat menggunakan anotasi untuk mendaftarkan sebuah hook, menghilangkan kebutuhan untuk mendaftarkan hook di app/Resources/contao/config/config.php.

1
fritzmg 9 Agustus 2019, 14:01