Namespace Migration REDAXO 5 → 6

REDAXO 6 verwendet PSR-4 Namespaces unter dem Haupt-Namespace Redaxo\Core.

Namespace-Übersicht

Namespace Beschreibung Enthält
Redaxo\Core Hauptklassen Core, Config, Cache, ErrorHandler, SystemReport
Redaxo\Core\Addon Add-on Management Add-on, AddonManager, AddonInterface
Redaxo\Core\ApiFunction API-Funktionen ApiFunction, Result, Exceptions
Redaxo\Core\Backend Backend-System Controller, Navigation, Page, Style
Redaxo\Core\Backup Backup-System Backup, FileCompressor, Tar
Redaxo\Core\Base Basis-Traits FactoryTrait, SingletonTrait, InstancePoolTrait
Redaxo\Core\Console CLI-Befehle Application, Command-Klassen
Redaxo\Core\Content Struktur/Inhalt Article, Category, Template, Module, Slice
Redaxo\Core\Cronjob Cronjobs CronjobManager, CronjobExecutor, Types
Redaxo\Core\Database Datenbank Sql, Table, Column, Index
Redaxo\Core\Exception Exceptions Exception, RuntimeException, UserMessageException
Redaxo\Core\ExtensionPoint Extension Points Extension, ExtensionPoint
Redaxo\Core\Filesystem Dateisystem Path, Url, File, Dir, Finder
Redaxo\Core\Form Formulare Form, ConfigForm, Field-Klassen
Redaxo\Core\Http HTTP-Handling Request, Response, Context
Redaxo\Core\HttpClient HTTP-Client Request, Response, ProxyRequest
Redaxo\Core\Language Mehrsprachigkeit Language, LanguagePermission
Redaxo\Core\Log Logging Logger, LogFile, LogEntry
Redaxo\Core\Mailer E-Mail Mailer
Redaxo\Core\MediaManager Bildbearbeitung MediaManager, ManagedMedia, Effects
Redaxo\Core\MediaPool Medienverwaltung Media, MediaCategory, MediaPool
Redaxo\Core\MetaInfo Meta-Informationen Handler, Form-Klassen
Redaxo\Core\RexVar REDAXO-Variablen RexVar, ArticleVar, MediaVar etc.
Redaxo\Core\Security Sicherheit User, Login, Permission, CsrfToken
Redaxo\Core\Setup Installation Setup, Importer
Redaxo\Core\Translation Übersetzungen I18n
Redaxo\Core\Util Hilfsfunktionen Formatter, Str, Version, Timer
Redaxo\Core\Validator Validierung Validator, ValidationRule
Redaxo\Core\View Ansichten View, Fragment, DataList, Navigation

Verwendungsbeispiele

Namespace-Import

<?php

// REDAXO 6.x - mit use Statements
use Redaxo\Core\Core;
use Redaxo\Core\Database\Sql;
use Redaxo\Core\Filesystem\Path;
use Redaxo\Core\Security\User;
use Redaxo\Core\View\Fragment;

// Hauptklasse
$version = Core::getVersion();
$isBackend = Core::isBackend();

// Datenbankabfragen
$sql = Sql::factory();
$sql->setTable(Core::getTable('article'));
$sql->select();

// Pfade
$mediaPath = Path::media('image.jpg');
$cachePath = Path::cache('myfile.cache');

// Benutzer
$user = Core::getUser();
if ($user instanceof User) {
    $name = $user->getName();
}

// Fragmente
$fragment = new Fragment();
$fragment->setVar('title', 'Mein Titel');
echo $fragment->parse('core/page/section.php');

Vollqualifizierte Klassennamen

<?php

// Alternativ ohne use Statements
$sql = \Redaxo\Core\Database\Sql::factory();
$path = \Redaxo\Core\Filesystem\Path::core();
$version = \Redaxo\Core\Core::getVersion();

Sub-Namespaces im Detail

Redaxo\Core\Addon

use Redaxo\Core\Addon\Addon;
use Redaxo\Core\Addon\AddonManager;
use Redaxo\Core\Addon\AddonInterface;
use Redaxo\Core\Addon\NullAddon;

// Add-on abrufen
$addon = Addon::get('myaddon');
if ($addon->isAvailable()) {
    $version = $addon->getVersion();
}

// Alle verfügbaren Add-ons
$addons = Addon::getAvailableAddons();

Redaxo\Core\Database

use Redaxo\Core\Database\Sql;
use Redaxo\Core\Database\Table;
use Redaxo\Core\Database\Column;
use Redaxo\Core\Database\Index;
use Redaxo\Core\Database\ForeignKey;
use Redaxo\Core\Database\Util;
use Redaxo\Core\Database\SchemaDumper;
use Redaxo\Core\Core;

// SQL-Abfragen
$sql = Sql::factory();

// Tabellenstruktur ändern
$table = Table::get(Core::getTable('mydata'))
    ->ensureColumn(new Column('id', 'int(11)', false, null, 'auto_increment'))
    ->ensureColumn(new Column('name', 'varchar(255)'))
    ->setPrimaryKey('id')
    ->ensure();

Redaxo\Core\Console

use Redaxo\Core\Console\Application;
use Redaxo\Core\Console\Command\AbstractCommand;

// Eigener Konsolenbefehl
class MyCommand extends AbstractCommand
{
    protected function configure(): void
    {
        $this->setName('myaddon:mycommand');
    }
    
    protected function execute(): int
    {
        // Implementierung
        return self::SUCCESS;
    }
}

Redaxo\Core\Form

use Redaxo\Core\Form\Form;
use Redaxo\Core\Form\ConfigForm;
use Redaxo\Core\Form\Field\BaseField;
use Redaxo\Core\Form\Field\SelectField;
use Redaxo\Core\Form\Select\Select;

// Standard-Formular
$form = Form::factory(Core::getTable('mydata'), 'Daten bearbeiten');
$form->addTextField('name', 'Name');
$form->addTextareaField('description', 'Beschreibung');

// Config-Formular
$form = ConfigForm::factory('myaddon');
$form->addTextField('api_key', 'API-Schlüssel');

Redaxo\Core\Security

use Redaxo\Core\Security\User;
use Redaxo\Core\Security\Login;
use Redaxo\Core\Security\BackendLogin;
use Redaxo\Core\Security\CsrfToken;
use Redaxo\Core\Security\Permission;
use Redaxo\Core\Security\UserRole;

// CSRF-Token
$token = CsrfToken::factory('myform');
$hiddenField = $token->getHiddenField();

if ($token->isValid()) {
    // Formular verarbeiten
}

// Benutzerprüfung
$user = Core::getUser();
if ($user && $user->hasPerm('myaddon[]')) {
    // Berechtigt
}

Redaxo\Core\View

use Redaxo\Core\View\View;
use Redaxo\Core\View\Fragment;
use Redaxo\Core\View\DataList;
use Redaxo\Core\View\Message;
use Redaxo\Core\View\Asset;
use Redaxo\Core\View\Navigation;

// Nachrichten
echo Message::success('Erfolgreich gespeichert');
echo Message::error('Fehler aufgetreten');
echo Message::info('Information');

// Assets
Asset::addCssFile('/assets/myaddon/styles.css');
Asset::addJsFile('/assets/myaddon/script.js');

// Datenliste
$list = DataList::factory('SELECT * FROM rex_mydata');
$list->addColumn('name', 'Name');

Redaxo\Core\Content

use Redaxo\Core\Content\Article;
use Redaxo\Core\Content\Category;
use Redaxo\Core\Content\ArticleSlice;
use Redaxo\Core\Content\Template;
use Redaxo\Core\Content\Module;

// Artikel abrufen
$article = Article::get($articleId, $clangId);
if ($article) {
    $name = $article->getName();
    $url = $article->getUrl();
}

// Kategorie
$category = Category::get($categoryId);
$children = $category->getChildren();

PSR-4 Autoloading

Die composer.json definiert das Autoloading:

{
    "autoload": {
        "psr-4": {
            "Redaxo\\Core\\": "src"
        }
    }
}

Dies bedeutet:

  • Redaxo\Core\Coresrc/Core.php
  • Redaxo\Core\Database\Sqlsrc/Database/Sql.php
  • Redaxo\Core\Form\Field\SelectFieldsrc/Form/Field/SelectField.php

IDE-Unterstützung

Für PhpStorm steht eine .phpstorm.meta.php Datei bereit, die:

  • Autovervollständigung für Factory-Methoden bietet
  • Typ-Inferenz für dynamische Methoden ermöglicht
  • Navigation zu Klassendefinitionen verbessert