部分要素への分割要素API構成の分割

クライアント用の Vue SPA(シングルページアプリケーション)と私の ElementAPI
設定ファイルがかなり大きくなっています。維持しやすくするために、私は自分のファイルに各エンドポイントを持つ方法の提案を探していました。

どんなフィードバックも感謝しています!

ベストアンサー

I had sometime to review the documentation in more depth;
https://github.com/craftcms/element-api/tree/v1#transformer

以下の略語例。注意すべき点は、/config 内の/transformers
ディレクトリにすべてのトランスフォーマーを含めることです。

file – craft/config/elementapi.php

  return [
    'endpoints' => [
     //Home
      //
      'api/home' => function() {
        require craft()->path->getConfigPath().'transformers/home.php';
        return [
          'elementType' => ElementType::Entry,
          'criteria' => [
            'section' => 'homepage'
          ],
          'first' => true,
          'cache' => 'PT1M',
          'transformer' => new homeAPI(),
        ];
      },

     //About
      //
      'api/about' => function() {
        require craft()->path->getConfigPath().'transformers/about.php';
        return [
          'elementType' => ElementType::Entry,
          'criteria' => [
            'section' => 'about'
          ],
          'first' => true,
          'transformer' => new aboutAPI(),
        ];
      },

     //Remaining Endpoints...
     //
    ]
  ];
?>

file-craft/config/transformers/home.php

<?php
  namespace Craft;
  require craft()->path->getPluginsPath().'elementapi/vendor/autoload.php';
  use LeagueFractalTransformerAbstract;

  class homeAPI extends TransformerAbstract {
    public function transform(EntryModel $entry) {

      $bodyBlocks = [];
      foreach ($entry->homepageContent as $block) {
        switch ($block->type->handle) {
          case 'gallery':

            $bodyBlocks[] = [
              'gallery' => [
                'thumbnails' => $thumbnails
              ]
            ];
          break;

         //Remaining Fields...
          //
        }
      }

      return [
        'id' => (integer) $entry->id,
        'title' => $entry->title,
        'content' => $bodyBlocks,
      ];
    }
  }

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です