ich möchte im Plugin einen eigenen REST API Endpoint erstellen. Der Controller sieht momentan folgendermaßen aus:
/**
* Class Shopware_Controllers_Api_TransArticle
*/
class Shopware_Controllers_Api_TransArticle extends Shopware_Controllers_Api_Rest
{
/**
* @var TransArticle
*/
protected $resource;
/*
public function init()
{
$this->resource = \Shopware\Components\Api\Manager::getResource('TransArticle');
}
*/
/**
* @param TransArticle $resource
*/
public function __construct(
TransArticle $resource
)
{
$this->resource = $resource;
}
/**
* Get one TransArticle
*
* GET /api/TransArticle/{id}
*/
public function getAction()
{
$id = $this->Request()->getParam('id');
/** @var \IbrArticleTransfer\Models\TransArticle $trans_article */
$trans_article = $this->resource->getOne($id);
$this->View()->assign(['success' => true, 'data' => $trans_article]);
}
}
Da das „Besorgen“ der Resource über _\Shopware\Components\Api\Manager::getResource _deprecated ist, möchte ich dass über die service.xml erledigen. Dabei hänge ich irgendwie an einem blöden Syntax-Problem: Die Klasse des Controllers lautet Shopware_Controllers_Api_TransArticle , abweichend vom php Dateinamen /Controllers/Api/TransArticle.php. Wie müsste der Eintrag in der service.xml aussehen?
funktioniert natürlich nicht. Hat jemand einen Tip für mich ?
… habe Version 5.6.6. Es scheitert vermutlich an der Argumentdefinition in der service.xml? Hatte zuletzt folgendes ausprobiert, was aber auch nicht klappt:
Der obere Service ist die Registrierung der Ressource, und der untere die Controller Registrierung mit dem Parameter für den Konstruktor:
/*
public function init()
{
// deprecated with 5.6, will be removed with 5.8. Inject the resource instead!
$this->resource = \Shopware\Components\Api\Manager::getResource('TransArticle');
}
*/
/**
* @param TransArticle $resource
*/
public function __construct(
TransArticle $resource
)
{
$this->resource = $resource;
}
… ich habe mal den Controller, nach dem Vorbild aus dem Link, umgebaut. Leider funktioniert er danach nicht mehr. Ich bin gerade auch nicht sicher, ob das dort gezeigte Beispiel auf einen API-Controller anwendbar ist???
Vielleicht geht es gar nicht, einen eigenen API-Controller als Service zu registrieren? Damit wäre das “Injecten” der Resource nicht möglich. Frage mich, wie das dann zukünftig gehen soll, wenn _\Shopware\Components\Api\Manager::getResource() _nicht mehr funktioniert.
Hat jemand noch eine Idee, bin gerade total ratlos???
Ich habe bisher keine Lösung dazu gefunden. Da \Shopware\Components\Api\Manager::getResource bisher noch funktioniert, ist es kein wirkliches Problem. Falls Du aber damit weiterkommst, wäre ich natürlich auch an der Lösung interessiert!
Gibt es hier inzwischen eine Lösung? Ich stehe gerade vor demselben Problem und würde ungern eine Funktion nutzen müssen, die absehbar zu Problemen führen wird.
hat jemand dazu noch einen Tipp oder ein Beispiel wie ein Controller erfolgreich über die services.xml eingebunden wird?
Ich bekomme immer Class „Shopware_Controllers_Api_Hello“ used for service „shopware_controllers_api_hello“ cannot be found.