logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll

Drupalモジュールでページをプログラム的に作成する

25/04/2020, by maria

Menu

Drupalで簡単なページを作成するには、2つのステップがあります:

パスとそのパラメーターを宣言します。

このステップには、ページのタイトル、ページへのアクセス要件などが含まれます。

Drupal 7では、hook_menu()を実装する必要がありました。

Drupal 8では、モジュールのトップレベルディレクトリに<module_name>.routing.ymlファイルを作成します。

ページの本文を返すコードを作成します。

Drupal 7では、hook_menu()で指定されたページコールバック関数を書く必要がありました。

Drupal 8では、ページコールバックはクラスのメソッドまたは登録されたサービスのいずれかである必要があります。さまざまな条件(HTTPまたはHTTPS、コンテンツヘッダーなど)によって異なる場合がありますが、これはこの入門の範囲外です。

ウォークスルー

このページの例に従うことで、Drupalの内部について詳しく知らなくても、カスタムモジュールに簡単なページを作成できます。詳細については、ルーティングシステムの変更に関するチェンジログと、コアおよびexamplesプロジェクトのさまざまな実装を参照してください。

サンプルモジュールのルーティングYAMLファイル

ルーティング情報はexample/example.routing.ymlに保存されます:

example.my_page:
  path: '/mypage/page'
  defaults:
    _controller: '\Drupal\example\Controller\ExampleController::myPage'
    _title: 'My first page in D8'
  requirements:
    _permission: 'access content'

example.my_page

  • これはルートのマシン名です。慣例により、ルートのマシン名はmodule_name.sub_nameにする必要があります。コードの他の部分がルートを参照する必要がある場合、マシン名を使用します。

 

path

  • これはサイトのページへのパスを提供します。先頭のスラッシュ(/)に注意してください。

 

defaults

  • これはページとタイトルのコールバックを説明します。@todo:これらのデフォルト値はどこで上書きできますか?

 

requirements

  • これはページが表示される条件を定義します。権限、有効にする必要があるモジュール、その他の条件を指定できます。

 

サンプルモジュールのページの実装

コントローラークラスExampleControllerは、example/src/Controller/ExampleController.phpで定義する必要があります:

<?php
namespace Drupal\example\Controller;

use Drupal\Core\Controller\ControllerBase;

/**
 * Provides route responses for the Example module.
 */
class ExampleController extends ControllerBase {

  /**
   * Returns a simple page.
   *
   * @return array
   *   A simple renderable array.
   */
  public function myPage() {
    $element = array(
      '#markup' => 'Hello, world',
    );
    return $element;
  }

}

名前空間(namespace)

  • ここでは、定義するクラスの完全名を決定するために必要なプレフィックスを宣言します。ドキュメントブロックとクラス名を比較してください。クラスのオートローダーは、\Drupal\example\Controller\ExampleControllerクラスを見つけるために、modules/example/src/Controller/ExampleController.phpファイルを見つける必要があることを認識しています。

 

use

  • これにより、完全修飾名の代わりにControllerBaseを使用できます。これにより、class行がずっと読みやすくなります。

 

myPage()

  • YAMLファイルで指定されたメソッドはpublicである必要があります。また、レンダリング可能な配列を返す必要があります。