Reputation: 171
i use the api platform in symfony 4 and i have question
I would like to know how to create a controller with api platform and create 2 route in get
I show you what I have done for now:
my controller :
/**
* @var UnedicPublicationOrderRepository
*/
private $publicationOrderRepository;
public function __construct(UnedicPublicationOrderRepository $publicationOrderRepository)
{
$this->publicationOrderRepository = $publicationOrderRepository;
}
public function __invoke()
{
$cible = $this->publicationOrderRepository->findAll();
return $cible;
}
and my entity for publication
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use ApiPlatform\Core\Annotation\ApiResource;
/**
* UnedicPublicationOrderController
*
* @ApiResource(
* collectionOperations={"get"={"method"="GET"}},
* itemOperations={
* "get"={"method"="GET", "path"="/publication/{cible}"},
* }
* )
* @ORM\Table(name="foo")
* @ORM\Entity
Upvotes: 1
Views: 12220
Reputation: 413
if your controller return a collection you need to add the route in collectionOperations otherwise register it in itemOperations section. Don't forget to import the controller class in entity.
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use ApiPlatform\Core\Annotation\ApiResource;
use App\Controllers\UnedicPublicationOrderController; // import controller
/**
* UnedicPublicationOrderController
*
* @ApiResource(
* collectionOperations={
"get"={"method"="GET"},
"get_publication_order"={
"path"="/publication_orders/all",
"method"="GET",
"controller"=UnedicPublicationOrderController::class
}
},
* itemOperations={
* "get"={"method"="GET", "path"="/publication/{cible}"},
* }
* )
* @ORM\Table(name="foo")
* @ORM\Entity
you can also check the docs for more examples creating-custom-operations-and-controllers
Upvotes: 5
Reputation: 604
To use a specific controller for a custom operation you need to add the controller as an option
use App\Controller\UnedicPublicationOrderController;
/**
* @ApiResource(
* itemOperations={
* "customGet"={
* "method"="GET",
* "path"="/publication/{cible}",
* "controller"=UnedicPublicationOrderController::class,
* },
* },
A complete example can be seen in the documentation
Upvotes: 1