我在symfony 4中使用api平台,我有疑问
我想知道如何使用api平台创建一个控制器并在get中创建2个路由
我告诉你我现在做了些什么:
我的控制器:
/**
* @var UnedicPublicationOrderRepository
*/
private $publicationOrderRepository;
public function __construct(UnedicPublicationOrderRepository $publicationOrderRepository)
{
$this->publicationOrderRepository = $publicationOrderRepository;
}
public function __invoke()
{
$cible = $this->publicationOrderRepository->findAll();
return $cible;
}
和我的实体出版
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
要将特定控制器用于自定义操作,您需要添加控制器作为选项
use App\Controller\UnedicPublicationOrderController;
/**
* @ApiResource(
* itemOperations={
* "customGet"={
* "method"="GET",
* "path"="/publication/{cible}",
* "controller"=UnedicPublicationOrderController::class,
* },
* },
在documentation中可以看到一个完整的例子
如果您的控制器返回一个集合,您需要在collectionOperations中添加路由,否则在itemOperations部分中注册它。不要忘记在实体中导入控制器类。
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
您还可以查看文档以获取更多示例creating-custom-operations-and-controllers