ich habe folgendes Problem. Ich benötige in meinem Plugin das Symfony http client Package (HTTP Client (Symfony Docs)).
Habe dies per composer installiert, ist auch in der composer.json und die Dateien sind im vendor Verzeichnis des Plugins vorhanden.
Danach habe ich einen Service in der service.xml angelegt und übergebe den Http-Client als Argument.
use GuzzleHttp\Client;
use GuzzleHttp\ClientInterface;
use GuzzleHttp\Psr7\Request;
...
public function __construct()
{
$this->client = new Client([
'timeout' => 120,
'allow_redirects' => false,
]);
$this->context = Context::createDefaultContext();
}
Mit Guzzle Http Client habe ich die Probleme nicht, mich würde trotzdem interessieren, wie man einen Symfony-Service richtig in ein Plugin integriert. Meine Schritte:
Pakete über composer installiert im Plugin Verzeichnis (composer.json & composer.lock und vendor Verzeichnis passen)
autoload.php in Plugin.php inkludiert
if (file_exists(dirname(__DIR__) . '/vendor/autoload.php')) {
require_once dirname(__DIR__) . '/vendor/autoload.php';
}
Service als Argument in der services.xml
Wenn ich die oben genannten Schritte mache, dann den Cache leere, kann ich das Frontend laden, jedoch kommt in der Konsole beim Ausführen von bin/console folgender Fehler:
Error: Cannot declare interface Symfony\Contracts\Service\ResetInterface, because the name is already in use
Wenn ich aber nach dem Cache leeren zuerst bin/console ausführe, funktioniert dieser, dann kommt der oben genannte Error beim Aufrufen des Frontends
Und ein Interface ist kein Service, ein Interface sagt nur aus welche Grundstruktur eine Class hat. Also eine Validierung. Du musst den HttpClient entweder Standalone bauen
use Symfony\Component\HttpClient\HttpClient;
$client = HttpClient::create();
$response = $client->request('GET', 'https://api.github.com/repos/symfony/symfony-docs');