Magento 2 Experten — Hyvä Theme, Tailwind CSS & SEO aus einer Hand ›

Nur ausgewählte Operationen aktivieren

Nur ausgewählte Operationen aktivieren

~15 Min. Lesezeit Zuletzt aktualisiert am 8. August 2026

NICHT jede Resource soll VOLL beschreibbar sein. Als KONKRETES Beispiel führen wir eine ZWEITE Entity ein: Tag – Referenzdaten, die NUR per Fixtures (Kapitel 15) angelegt werden, NIEMALS über die API.

Die Tag-Entity anlegen

docker compose exec php bin/console make:entity Tag
api/src/Entity/Tag.php
<?php

declare(strict_types=1);

namespace App\Entity;

use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use App\Repository\TagRepository;
use Doctrine\ORM\Mapping as ORM;

#[ApiResource(
    operations: [
        new GetCollection(),
        new Get(),
    ]
)]
#[ORM\Entity(repositoryClass: TagRepository::class)]
class Tag
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column]
    private ?int $id = null;

    #[ORM\Column(length: 100, unique: true)]
    private string $name = '';

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getName(): string
    {
        return $this->name;
    }

    public function setName(string $name): static
    {
        $this->name = $name;

        return $this;
    }
}

NUR ZWEI Klassen in der operations-Liste: GetCollection und Get. Post, Put, Patch und Delete fehlen KOMPLETT – API Platform generiert für sie GAR KEINE Route.

Das Verhalten testen

curl -k -X POST https://localhost/api/tags \
  -H 'Content-Type: application/json' \
  -d '{"name": "Dringend"}'
{
  "@context": "/api/contexts/Error",
  "@type": "hydra:Error",
  "hydra:title": "An error occurred",
  "hydra:description": "No route found for \"POST /api/tags\""
}

Achtung: Status 404 Not Found, NICHT 405 Method Not Allowed – aus Sicht des Routers EXISTIERT die Route für POST /api/tags schlicht NICHT, da sie NIE registriert wurde.

Wann sich schreibgeschützte Resources lohnen

  • Referenz-/Lookup-Daten (Tags, Kategorien, Status-Werte), die zentral über Fixtures oder ein Admin-Panel gepflegt werden.
  • Berechnete oder aggregierte Daten (z. B. eine Statistik-Resource), bei denen Schreiben KONZEPTIONELL keinen Sinn ergibt.
  • Daten aus EXTERNEN Systemen, die über API Platform nur GESPIEGELT, nicht VERÄNDERT werden sollen.

Noch enger: nur GetCollection, kein Get

Genauso lässt sich Get WEGLASSEN und NUR GetCollection behalten – dann existiert AUSSCHLIESSLICH GET /api/tags, aber KEIN GET /api/tags/{id} für ein einzelnes Element. In der Praxis ist das SELTEN sinnvoll, zeigt aber, wie GRANULAR sich die Liste steuern lässt.

Tipp: Die Property ApiResource::$operations ist eine EINFACHE PHP-Liste – jede bekannte Kontrollstruktur (Bedingungen, Schleifen beim Generieren von Config) funktioniert wie bei JEDEM anderen PHP-Array auch, es gibt KEINE spezielle DSL.