【发布时间】:2022-01-13 20:45:01
【问题描述】:
刚刚开始使用启用了 graphQl 支持的 api 平台。如果我对 graphQl 的理解正确,我不需要像使用 REST 那样创建路由,端点是从模型模式在前端创建的。
但是如果我有一个包含一些逻辑的方法并且我需要运行该代码怎么办?如果我没有路线,我将无法执行。我还能做什么?
提前感谢您的回答。 Br
【问题讨论】:
标签: php api symfony api-platform.com
刚刚开始使用启用了 graphQl 支持的 api 平台。如果我对 graphQl 的理解正确,我不需要像使用 REST 那样创建路由,端点是从模型模式在前端创建的。
但是如果我有一个包含一些逻辑的方法并且我需要运行该代码怎么办?如果我没有路线,我将无法执行。我还能做什么?
提前感谢您的回答。 Br
【问题讨论】:
标签: php api symfony api-platform.com
您可以通过使用 custom queries 获取数据或使用 custom mutations 以 REST 术语发布/放置/删除数据来解决这个问题。
你的问题暗示你想要一个自定义突变,根据文档,这将像这样工作:
创建您的解析器:
<?php
namespace App\Resolver;
use ApiPlatform\Core\GraphQl\Resolver\MutationResolverInterface;
use App\Model\Book;
final class BookMutationResolver implements MutationResolverInterface
{
/**
* @param Book|null $item
*
* @return Book
*/
public function __invoke($item, array $context)
{
// Mutation input arguments are in $context['args']['input'].
// Do something with the book.
// Or fetch the book if it has not been retrieved.
// The returned item will pe persisted.
return $item;
}
}
然后使用这个自定义突变如下:
<?php
namespace App\Model;
use ApiPlatform\Core\Annotation\ApiResource;
use App\Resolver\BookMutationResolver;
#[ApiResource(
graphql: [
// Auto-generated queries and mutations
'item_query',
'collection_query',
'create',
'update',
'delete',
'mutation' => [
'mutation' => BookMutationResolver::class
],
'withCustomArgsMutation' => [
'mutation' => BookMutationResolver::class,
'args' => [
'sendMail' => ['type' => 'Boolean!', 'description'=> 'Send a mail?' ]
]
],
'disabledStagesMutation' => [
'mutation' => BookMutationResolver::class,
'deserialize' => false,
'write' => false
]
]
)]
class Book
{
// ...
}
【讨论】: