问题描述
我已经设置了一个 Laravel 8 站点,使用 PHP 7.4。
我更喜欢 Twig 前端模板而不是 Blade。我已经安装了 twigbridge 以启用 Twig 使用。 模板效果很好。
我想在我的 Twig 模板中通过 GraphQL 查询访问/引用后端内容。
我已将“PHP GraphQL 客户端”(https://github.com/mghoneimy/php-graphql-client) 作曲家安装到 Laravel 应用中。
$gql = (new Query('companies'))
->setSelectionSet(
[
'name','serialNumber'
]
);
为了将查询结果注入到我的 Laravel/Twig 模板中,我正在创建一个 TwigExtension
我从分散的在线帖子和没有太多文档中拼凑出扩展。 到目前为止,我有(尚未运行/WIP)
edit app/Twig/GraphqlQuery.PHP
<?PHP
namespace App\Twig;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
use GraphQL\Client;
use GraphQL\Exception\QueryError;
use GraphQL\Query;
class GraphqlQuery extends AbstractExtension {
protected $client;
protected $query;
public function __construct(
Client $client,Query $query
) {
$this->client = $client;
$this->query = $query;
}
public function getFunctions(): array {
return [
new TwigFunction(
'gql_query',[$this,'gqlQuery']
),];
}
public function gqlQuery($gql_data) {
$gql = (new Query('twig'))
->setvariables(
[
new Variable('name','String',true),new Variable('limit','Int',false,5)
]
)
->setArguments(
[
'name' => '$name','first' => '$limit'
]
)
->setSelectionSet(
[
'name','serialNumber'
]
);
try {
$results = $this->gqlClient->runQuery($gql);
}
catch (QueryError $exception) {
print_r($exception->getErrorDetails());
exit;
}
$results = $this->gqlClient->runQuery($gql,true); // array structure
return $results;
}
}
我想获取数组数据
->setvariables(
[
new Variable('name',5)
]
)
->setArguments(
[
'name' => '$name','first' => '$limit'
]
)
->setSelectionSet(
[
'name','serialNumber'
]
);
从我的 Twig 模板传入,理想情况下包裹在
{#graphql
树枝标签。
第一步 -- 重构 function gqlQuery()
以接受来自 Twig 模板的正确编码等数组内容的正确方法是什么?
解决方法
如果您想在树枝内部处理此用例,则不会有针对此用例的简单解决方案。您实际上可以将数组发送到 TwigFunction
,例如
{% set graph = glq_query({
'variables': [
[ 'name','String',true,],[ 'limit','Int',false,5 ],'arugments': {
'name': '$name','first': '$limit',},'selectionSet': [
'name','serialNumber',}) %}
但是,您需要为可以创建以控制 Graph QL 客户端的每个可能组合编写验证/检查