0

处理来自 Craft CMS 项目的 element-api.php 文件。有很多辅助功能。我添加了一个名为学科的类别。我正在尝试公开每个条目的值。

这是我正在处理的整个辅助函数:

    // Get all projects, by date, newest first
    function getAllProjects() {
      $caseStudies = [];
      $query = \craft\elements\Entry::find();
      $query->section('caseStudies');
      $query->orderBy('postDate desc');
      foreach ($query->all() as $page) {
        $isPublic = $page->public;
        $parent = $page->getSection()->handle;
        if ($isPublic) {
          $serviceData = [];
          foreach ($page->modules->all() as $module) {
            switch ($module->type->handle) {
              case 'service':
                $service = $module->service->one();
                if ($service) {
                  $serviceData[] = [
                    'id' => $service->service->one()->id,
                    'title' => $service->service->one()->title,
                  ];
                }
                break;
            }
          }

          $coverColor = [
            'r' => $page->coverColor ? $page->coverColor->r : 0,
            'g' => $page->coverColor ? $page->coverColor->g : 0,
            'b' =>$page->coverColor ? $page->coverColor->b : 0,
          ];

          $caseStudies[] = [
            'id' => $page->id,
            'title' => $page->title,
            'meta' => [
              'navigationColor' => $page->navigationColor->value,
              'title' => $page->metaTitle ? $page->metaTitle : $page->title,
              'description' => $page->metaDescription,
            ],
            'slug' => $page->slug,
            'postDate' => date("d-m-Y",$page->postDate->getTimestamp()),
            'json' => UrlHelper::url("work/{$page->slug}.json"),
            'parent' => $parent,
            'headline' => $page->headline,
            'client' => $parent === 'caseStudies' ? $page->client->one()->title : null,
            'services' => $serviceData,
            'discipline' => array_map(function (CategoryModel $category) {
              return [
                  'id' => $category->id,
                  'title' => $category->title,
              ];
            }, $page->discipline->find()),
            'cover' => handelImages($page->cover->all()),
            'coverColor' => $coverColor,
            'coverVideo' => [
              'source' => $page->coverVideo
            ]
          ];
        }
      }
      return $caseStudies;
    }

除了 caseStudies 数组之外,一切正常,我添加了这一行:

    'discipline' => array_map(function (CategoryModel $category) {
          return [
              'id' => $category->id,
              'title' => $category->title,
          ];
        }, $page->discipline->find()),

返回错误:传递给 {closure}() 的参数 1 必须是 CategoryModel 的实例,给定的 craft\elements\Category 的实例

站点位于 Craft 3.3.15。Element-Api 插件是 2.6.0

4

1 回答 1

1
'dispiplines' => array_map('strval', $page->discipline->all())

这行得通。在 github 页面上找到了一个标签示例https://github.com/craftcms/element-api

于 2020-12-01T00:38:34.610 回答