>

Drupal 8을 처음 사용하므로 데이터 '문서'목록을 반환하는 클래스 서비스를 만들었으며 컨트롤러 내 에서이 서비스 클래스를 호출하지만 데이터가 표시되지 않습니다.

class inside a service

 public function getArticles(){
    $storage = \Drupal::service('entity_type.manager')->getStorage('node');
    $my_entity_ids = $storage->getQuery()
      ->condition('type', 'article')
      ->condition('status', 1)
      ->execute();
    $my_entities = $storage->loadMultiple($my_entity_ids);
    return $my_entities;
  }

the controller

public function myPage() {
    $data = \Drupal::service('mymodule.service');
    $dataService = $data->getArticles();
    return $dataService;
  }

output :

화이트 페이지

아무도 내가 기사를 얻을 수없는 이유를 말해 줄 수 있습니까?


  • 답변 # 1

    컨트롤러는 렌더 배열을 반환해야합니다. 새로운 방법으로 렌더링하기 위해 기사를 처리한다고 가정 해 봅시다.renderMyPage ()당신이 전화나의 페이지()기사 객체의 배열을 전달하십시오.

    기사에서 여러 필드를 표시하는 경우 뷰 모드를 작성 및 구성한 다음이 답변에 설명 된대로 뷰 모드 렌더링 배열을 얻는 것이 가장 좋습니다.

    function renderMyPage($articleObjects) {
      $view_builder = \Drupal::entityTypeManager()->getViewBuilder('node');
      $articles = [];
      foreach ($articleObjects as $article) {
        $articles[] = $view_builder->view($article, 'my_view_mode_machine_name');
      }
      return $articles;
    }
    
    

    기사에서 단일 필드를 렌더링하려는 경우이 답변에 설명 된대로 필드의 렌더링 배열을 얻을 수 있습니다.

    function renderMyPage($articleObjects) {
      $articles = [];
      foreach ($articleObjects as $article) {
        // You can pass a view_mode machine name or
        // an array of field configurations to view().
        $articles[] = $article->title->view();
      }
      return $articles;
    }
    
    

    또는 제목을 h2로 렌더링하도록 자신 만의 렌더 배열을 만들 수 있습니다.

    function renderMyPage($articleObjects) {
      $articles = [];
      foreach ($articleObjects as $article) {
        $articles[] = [
          '#type' => 'html_tag',
          '#html_tag' => 'h2',
          '#value' => $article->title->value,
          // The other methods add cache tags automatically, but we need to add
          // cache tags manually here since we're building the array from scratch.
          '#cache' => [
            'tags' => $article->getCacheTags(),
          ],
        ];
      }
      return $articles;
    }
    
    

    이러한 각 예는 $articles 귀하의 반환 값으로 적합한 렌더링 가능한 내용의 배열나의 페이지()방법.

  • 이전 drupal - 데이터베이스에서 모든 기사를 얻으려면 어떻게해야합니까?
  • 다음 drupal - 컨트롤러에서 둘 이상의 필드 값을 렌더링하려면 어떻게해야합니까?