API-Funktionen Migration REDAXO 5 → 6
Diese Dokumentation zeigt die Änderungen an API-Funktionen zwischen REDAXO 5.x und REDAXO 6.x.
Übersicht der API-Klassen
API-Funktionen wurden reorganisiert und in thematisch passende Namespaces verschoben.
Core API
| REDAXO 5.x |
REDAXO 6.x |
Beschreibung |
rex_api_function |
Redaxo\Core\ApiFunction\ApiFunction |
Basis-Klasse |
rex_api_result |
Redaxo\Core\ApiFunction\Result |
Ergebnis-Klasse |
rex_api_exception |
Redaxo\Core\ApiFunction\Exception\ApiFunctionException |
Exception |
Addon/Package API
| REDAXO 5.x |
REDAXO 6.x |
Beschreibung |
rex_api_package |
Redaxo\Core\Addon\ApiFunction\AddonOperation |
Add-on Operationen |
Security/User API
| REDAXO 5.x |
REDAXO 6.x |
Beschreibung |
rex_api_has_user_session |
Redaxo\Core\Security\ApiFunction\UserHasSession |
Session-Prüfung |
rex_api_user_impersonate |
Redaxo\Core\Security\ApiFunction\UserImpersonate |
Benutzer wechseln |
rex_api_user_remove_auth_method |
Redaxo\Core\Security\ApiFunction\UserRemoveAuthMethod |
Auth-Methode entfernen |
rex_api_user_remove_session |
Redaxo\Core\Security\ApiFunction\UserRemoveSession |
Session entfernen |
rex_api_user_session_status |
Redaxo\Core\Security\ApiFunction\UserSessionStatus |
Session-Status |
Content/Structure API
| REDAXO 5.x |
REDAXO 6.x |
Beschreibung |
rex_api_article_add |
Redaxo\Core\Content\ApiFunction\ArticleAdd |
Artikel hinzufügen |
rex_api_article_copy |
Redaxo\Core\Content\ApiFunction\ArticleCopy |
Artikel kopieren |
rex_api_article_delete |
Redaxo\Core\Content\ApiFunction\ArticleDelete |
Artikel löschen |
rex_api_article_edit |
Redaxo\Core\Content\ApiFunction\ArticleEdit |
Artikel bearbeiten |
rex_api_article_move |
Redaxo\Core\Content\ApiFunction\ArticleMove |
Artikel verschieben |
rex_api_article_status |
Redaxo\Core\Content\ApiFunction\ArticleStatusChange |
Artikel-Status |
rex_api_article2category |
Redaxo\Core\Content\ApiFunction\ArticleToCategory |
Artikel → Kategorie |
rex_api_article2startarticle |
Redaxo\Core\Content\ApiFunction\ArticleToStartArticle |
Artikel → Startartikel |
rex_api_category_add |
Redaxo\Core\Content\ApiFunction\CategoryAdd |
Kategorie hinzufügen |
rex_api_category_delete |
Redaxo\Core\Content\ApiFunction\CategoryDelete |
Kategorie löschen |
rex_api_category_edit |
Redaxo\Core\Content\ApiFunction\CategoryEdit |
Kategorie bearbeiten |
rex_api_category_move |
Redaxo\Core\Content\ApiFunction\CategoryMove |
Kategorie verschieben |
rex_api_category_status |
Redaxo\Core\Content\ApiFunction\CategoryStatusChange |
Kategorie-Status |
rex_api_category2article |
Redaxo\Core\Content\ApiFunction\CategoryToArticle |
Kategorie → Artikel |
rex_api_content_copy |
Redaxo\Core\Content\ApiFunction\ContentCopy |
Inhalt kopieren |
rex_api_content_move_slice |
Redaxo\Core\Content\ApiFunction\ArticleSliceMove |
Slice verschieben |
rex_api_content_slice_status |
Redaxo\Core\Content\ApiFunction\ArticleSliceStatusChange |
Slice-Status |
| REDAXO 5.x |
REDAXO 6.x |
Beschreibung |
rex_api_metainfo_default_fields_create |
Redaxo\Core\MetaInfo\ApiFunction\DefaultFieldsCreate |
Standard-Felder erstellen |
Eigene API-Funktion erstellen
REDAXO 5.x
<?php
class rex_api_myfunction extends rex_api_function
{
protected $published = true; // Öffentlich zugänglich
public function execute()
{
$id = rex_get('id', 'int');
// Daten verarbeiten
return new rex_api_result(true, 'Erfolgreich ausgeführt');
}
}
REDAXO 6.x
<?php
namespace MyAddon\ApiFunction;
use Redaxo\Core\ApiFunction\ApiFunction;
use Redaxo\Core\ApiFunction\Result;
use Redaxo\Core\Http\Request;
class MyFunction extends ApiFunction
{
protected bool $published = true; // Öffentlich zugänglich
public function execute(): Result
{
$id = Request::get('id', 'int');
// Daten verarbeiten
return new Result(true, 'Erfolgreich ausgeführt');
}
}
API-Aufruf
URL-Generierung
// REDAXO 5.x
$url = rex_url::backendPage('mypage', [
'rex-api-call' => 'myfunction',
'id' => 5
]);
// REDAXO 6.x
use Redaxo\Core\Filesystem\Url;
$url = Url::backendPage('mypage', [
'rex-api-call' => 'myfunction',
'id' => 5
]);
API-Ergebnis verarbeiten
// REDAXO 5.x
$apiResult = rex_api_function::getResult();
if ($apiResult && $apiResult->isSuccessful()) {
echo rex_view::success($apiResult->getMessage());
}
// REDAXO 6.x
use Redaxo\Core\ApiFunction\ApiFunction;
use Redaxo\Core\View\Message;
$apiResult = ApiFunction::getResult();
if ($apiResult && $apiResult->isSuccessful()) {
echo Message::success($apiResult->getMessage());
}
Exception Handling
REDAXO 5.x
<?php
class rex_api_myfunction extends rex_api_function
{
public function execute()
{
if (!$condition) {
throw new rex_api_exception('Fehler: Bedingung nicht erfüllt');
}
return new rex_api_result(true, 'OK');
}
}
REDAXO 6.x
<?php
namespace MyAddon\ApiFunction;
use Redaxo\Core\ApiFunction\ApiFunction;
use Redaxo\Core\ApiFunction\Result;
use Redaxo\Core\ApiFunction\Exception\ApiFunctionException;
class MyFunction extends ApiFunction
{
public function execute(): Result
{
if (!$condition) {
throw new ApiFunctionException('Fehler: Bedingung nicht erfüllt');
}
return new Result(true, 'OK');
}
}
Vollständiges Beispiel
REDAXO 5.x
<?php
class rex_api_article_publish extends rex_api_function
{
protected $published = true;
public function execute()
{
$articleId = rex_request('article_id', 'int');
$clangId = rex_request('clang_id', 'int', rex_clang::getCurrentId());
// CSRF-Prüfung
if (!rex_csrf_token::factory('article_publish')->isValid()) {
throw new rex_api_exception('CSRF-Token ungültig');
}
// Artikel laden
$article = rex_article::get($articleId, $clangId);
if (!$article) {
throw new rex_api_exception('Artikel nicht gefunden');
}
// Artikel veröffentlichen
$sql = rex_sql::factory();
$sql->setTable(rex::getTable('article'));
$sql->setWhere(['id' => $articleId, 'clang_id' => $clangId]);
$sql->setValue('status', 1);
$sql->update();
// Cache löschen
rex_article_cache::delete($articleId, $clangId);
return new rex_api_result(true, 'Artikel wurde veröffentlicht');
}
}
REDAXO 6.x
<?php
namespace MyAddon\ApiFunction;
use Redaxo\Core\ApiFunction\ApiFunction;
use Redaxo\Core\ApiFunction\Result;
use Redaxo\Core\ApiFunction\Exception\ApiFunctionException;
use Redaxo\Core\Content\Article;
use Redaxo\Core\Content\ArticleCache;
use Redaxo\Core\Core;
use Redaxo\Core\Database\Sql;
use Redaxo\Core\Http\Request;
use Redaxo\Core\Language\Language;
use Redaxo\Core\Security\CsrfToken;
class ArticlePublish extends ApiFunction
{
protected bool $published = true;
public function execute(): Result
{
$articleId = Request::request('article_id', 'int');
$clangId = Request::request('clang_id', 'int', Language::getCurrentId());
// CSRF-Prüfung
if (!CsrfToken::factory('article_publish')->isValid()) {
throw new ApiFunctionException('CSRF-Token ungültig');
}
// Artikel laden
$article = Article::get($articleId, $clangId);
if (!$article) {
throw new ApiFunctionException('Artikel nicht gefunden');
}
// Artikel veröffentlichen
$sql = Sql::factory();
$sql->setTable(Core::getTable('article'));
$sql->setWhere(['id' => $articleId, 'clang_id' => $clangId]);
$sql->setValue('status', 1);
$sql->update();
// Cache löschen
ArticleCache::delete($articleId, $clangId);
return new Result(true, 'Artikel wurde veröffentlicht');
}
}
Registrierung der API-Funktion
REDAXO 5.x (boot.php)
<?php
// API-Funktion wird automatisch über Klassennamen registriert
// Datei: lib/api_function/rex_api_article_publish.php
REDAXO 6.x (boot.php)
<?php
use Redaxo\Core\ApiFunction\ApiFunction;
use MyAddon\ApiFunction\ArticlePublish;
// API-Funktion registrieren
ApiFunction::register('article_publish', ArticlePublish::class);