tobimori / kirby-dreamform

✨ DreamForm is an opiniated form builder plugin for Kirby CMS that makes forms work like magic
https://plugins.andkindness.com/dreamform
41 stars 5 forks source link

Querying forms via API (Kql) #75

Open Matoseb opened 1 month ago

Matoseb commented 1 month ago

Hello I get this error while fetching the site page using Nuxt KQL x Headless Kirby. The website has multilanguage. Is the plugin compatible with this workflow?

 ERROR  Failed KQL query "site" (...) with status code 500:
 { status: 'error',
  message:
   'Kirby\\Cms\\Page::__construct(): Argument #1 ($props) must be of type array, tobimori\\DreamForm\\Models\\FormPage given, called in /home/clients/da920ca64b0714c4f7b6fbc7005a2892/sites/mywebsite.com/site/plugins/kql/src/Kql/Interceptor.php on line 254',
  code: 500,
  key: null,
  details: [] }
tobimori commented 1 month ago

I always assumed it was compatible (minus the built-in snippets, of course) and the API mode was specifically to support custom forms in headless setups. I will take a look when I find time.

Matoseb commented 3 weeks ago

I tried to query the forms page directly using KQL. But this was pointless. You may close this issue.

I always assumed it was compatible (minus the built-in snippets, of course) and the API mode was specifically to support custom forms in headless setups. I will take a look when I find time.

It is! I even query the HTMX inside my Vue/Nuxt App 😅 instead of using the API. For anyone interested:

  1. Had a few CORS isssues along the way (I had to allow all the HTMX request headers in the preflight request) in the headless.cors config.
  2. I'm rendering a dedicated php template to send the htmx:

    ...
    
      // query https://cms.kirby.example/mypage?form=page%3A%2F%2F134567
      $uuid = get('form');
      if($uuid == null) {
        throw new Exception('"form" query is required');
      }
      $uuid = urldecode($uuid);
    
      snippet('dreamform/form', [
        'form' => page($uuid),
    
    ...
    
tobimori commented 3 weeks ago

I just noticed that using KQL is not really possible, since models are not supported yet (I made an issue for that in the past). If you'd like to use KQL, you'd have to write a custom method that queries all fields depending on the type. Maybe I can add a toKqlArray method or something in the future, I will keep this open as a reminder to investigate it at some point...