2020-04-23

gql をつかってテンプレートからGraphQLでエントリを作成する #craftcms

Craft CMS 3.5 Beta1 でプラグインなしでも GraphQL の mutation が使えるようになった。

FR: GraphQL support on Mutation · Issue #4835 · craftcms/cms
https://github.com/craftcms/cm...

以前、テンプレートで GraphQL を使ってみるのをためしてみて、んじゃ mutation も試してみようと思って色々やってみる。

GraphQL 使う方法は別に無理やりテンプレートでやる必要はなくて、他の方法が色々とあるわけだけど、、、、

まずはスキーマを作成する。

スキーマを作成したらトークンを作成して、設定する。

ひとまずここまで。

まずはこのヘッダーで外部から投げられるのを一応確認しておく。

エントリも問題なく作成できた。

外部から投げる場合は authorid が必要なので忘れないようにする。

テンプレート(Twig)でGraphQLを使う

次にテンプレートを用意して記載していく。
まずはheader を設定しておく。

{% header "Authorization: Bearer aaaaaa" %}

そのうえで gql をつかって、こんな感じで投げる。

{% set hogehoge = gql('mutation{
  	save_test_test_Entry(
	    authorId: 1,
	    title: "mersymersy",
	    testtext: "mariemarie"
	  ){
	    id
	    url
	  }
}') %}

{{ d(hogehoge)}}

gql の後に mutation をつける。

これで Twig からエントリも作成されて、エントリ作成後のレスポンスを受け取ってごにょごにょやることもできそう。

test セクションの test 入力タイプということで save_test_test_Entry になる。

会員制のサイトとか、フォームとか(まぁ、フォームはプラグインがあるからそれを使った方が早いだろうけど)、データを管理する別の管理画面とか、色々やることができそう。

PHPちゃんと分からないと理解できないことだらけではあった。。。

試行錯誤した内容メモ

GraphQL で ping となげれば pong とかえってくるんだけど

{% set hogehoge = gql('{
ping
}') %}

↓↓↓

pong

Mutation の時は

{
  "data": {
    "ping": "A mutated pong"
  }
}

こういうレスポンスになるはずなんだけど。

gql のどこで mutation の指定をするのか悩んでたけど、 gql はよくみると ` ` の中がクエリとかになるんだから、ここにかけばよいのか、、、というのに気づくのに時間がかかった。

{% set hogehoge = gql(' { } ') %}

は、つまるところ

{% set hogehoge = gql('query{

 }') %}

のように query が省略されてるかんじよね、、、ということだけだった。