Skript lokale Api verwenden

Hallo alle zusammen, ich möchte gerne lokal auf die API zugreifen. Dafür orientiere ich mich an: http://wiki.shopware.de/Shopware-4-Loka … l_992.html Ich habe dieses Skript erstellt. Sobald ich $client = new Shopware_Controllers_Frontend_ApiTest(); ausführe, wird print “abc”; nicht mehr angezeigt. Wenn ich es nicht ausführe (auskommentiere), wird abc angezeigt. Obwohl ich auf benuterdefinierte Fehlerbehandlung umgestellt habe, kommt keine Fehlermeldung. Stellt Shopware auf eine eigene Fehlerbehandlung um? Wenn ich nämlich extends Enlight_Controller_Action auskommentiere, dann kommt abc wieder. Wo liegt mein Fehler? Ist es vielleicht beabsichtigt? //edit: Ich habe herausgefunden, dass der IE einen 500-Serverfehler auswirft. Somit muss ich irgendetwas falsch konfiguriert haben. Weiß jemand, was? Wie gesagt, wenn ich extends Enlight_Controller_Action auskommentiere, kommt der Fehler nicht. [code]<?php // auf die benutzerdefinierte Fehlerbehandlung umstellen
$alter_error_handler = set_error_handler(“myErrorHandler”);

$client = new Shopware_Controllers_Frontend_ApiTest();
//$article = $client->loadArticleAction(); print “abc”; // Fehlerbehandlungsfunktion function myErrorHandler($fehlercode, $fehlertext, $fehlerdatei, $fehlerzeile) { switch ($fehlercode) { case E_USER_ERROR: echo " Mein FEHLER [$fehlercode] $fehlertext
\n"; echo " Fataler Fehler in Zeile $fehlerzeile in der Datei $fehlerdatei"; echo “, PHP " . PHP_VERSION . " (” . PHP_OS . “)
\n”; echo “Abbruch…
\n”; exit(1); break; case E_USER_WARNING: echo " Meine WARNUNG [$fehlercode] $fehlertext
\n"; break; case E_USER_NOTICE: echo " Mein HINWEIS [$fehlercode] $fehlertext
\n"; break; default: echo “Unbekannter Fehlertyp: [$fehlercode] $fehlertext
\n”; break; } /* Damit die PHP-interne Fehlerbehandlung nicht ausgeführt wird */ return true; } class Shopware_Controllers_Frontend_ApiTest extends Enlight_Controller_Action { protected $articleResource; public function init() { $this->Front()->Plugins()->ViewRenderer()->setNoRender(); $this->initArticleResource(); } public function initArticleResource() { $this->articleResource = \Shopware\Components\Api\Manager::getResource(‘Article’); } public function loadArticleAction() { $article = $this->articleResource->getOne(3); } public function loadArticlesAction() { $articles = $this->articleResource->getList(); } public function loadArticlesWithFilterAction() { $filters = array( ‘name’ => ‘Schmuckbaum’ ); $articles = $this->articleResource->getList(0, 25, $filters); } public function loadArticlesWithOrderByAction() { $orderBy = array(array( ‘property’ => ‘added’, ‘direction’ => ‘DESC’ )); $articles = $this->articleResource->getList(0, 25, array(), $orderBy); } public function createAction() { $params = array( ‘name’ => ‘Neuer Artikel’, ‘taxId’ => 1, ‘mainDetail’ => array( ‘number’ => ‘SW123456’ ) ); $article = $this->articleResource->create($params); } public function updateAction() { $params = array( ‘name’ => ‘Neuer Artikelname’ ); $article = $this->articleResource->update(193, $params); } public function deleteAction() { $article = $this->articleResource->delete(193); } } [/code]

Ich würde mal annehmen, dass in Deinem Skript die “Enlight_Controller_Action” nicht bekannt ist. Wenn Du das von Dir gepostet Skript einfach ausführst, fehlt der Autoloader von Shopware. Oder wie rufst Du es auf?

Ich rufe es so auf, wie ich gepostet habe. Ist es notwendig, dass ich noch irgendwelche Klassen einbinde/inkludiere? Wie kann ich meinem Skript mitteilen, wo es die „Enlight_Controller_Action“-Klasse findet?

Das ist ja völlig aus dem Kontext gegriffen. Kein Plugin, keine Registrierung irgendwelcher autoloader/Events/Controllern, keine Hauptinstanz des Shops usw … Hier gibt es Hilfe: Shopware Plugin Wenn Du die lokale API verwenden willst, würde ich mit dem oben genannten Grundgerüst anfangen. Schöne Grüße, Niklas

Ich dachte, ich könnte einfach so ein Testskript erstellen. Geht das nur als Plugin?

Du erbst von Enlight_Controller_Action und spricht Shopware Namespaces an - woher sollen die denn kommen? Du definierst in deinem Script doch nichts dergleichen, dann kann das auch definitiv nicht funktionieren. Deswegen: Spiel dein Script bzw. starte es als Plugin ein, sonst hast Du nicht die Möglichkeiten, die Du da gerade versuchst. Und, anhand verschiedener Kriterien (Misch-Masch von OOP und Standard functions, Klassen-Definition und externen Code innerhalb von einer Datei) sehe ich, dass Du wohl mit verschiedenen und grundlegenden Praktiken nicht vertraut bist: Lies und spiel lieber die Beispiele aus dem Wiki durch, sonst wird es schwer bis unmöglich. Schöne Grüße und viel Erfolg, Niklas

OK, danke! Ich dachte das umgehen zu können. Ein Plugin habe ich auch schon erstellt und kann das dann über diesen Weg regeln. Mein Ziel ist eigentlich die lokale API für ein paar Situationen verwenden zu können, weil ich den Remote-Zugriff auf die API noch nicht hinbekommen habe :happy: