1.2 菜单

hook_menu() 和它的回调函数发生了什么?

Drupal 8 龥龡hook_menu() 龇龄龁龀齽齻齷齶 YAML 齬齨齧

YAML 齬齨

齣齢

modulename.routing.yml

齔齓 URL 齎齌齉齆齃鼿鼽鼼鼺鼸鼶龇鼳

modulename.links.menu.yml

齔齓鼬鼪鼩鼼鼧鼦鼳

modulename.links.action.yml

鼡鼟 Drupal 7 鼼鼙鼗 MENU_LOCAL_ACTION 鼳

modulename.links.task.yml

鼡鼟 Drupal 7 鼼鼙鼗 MENU_DEFAULT_LOCAL_TASK 鼳

Drupal 8 黾黽黻黹黷 Symfony2 components 黰黬齎齌黨黦黢點黚黗鼼齎黕龡黒黏鼽黎黍黋鼳

  1. 黊黇黅齶黁麾麼 page_example 麷龡麵麱 page_example.routing.yml 齬齨鼳
  2. 麮麭麩麥龡麢麞麜麘麕麑鼳

麍麋麈麆麃鹿鹽鼼齎黕 page_example_description 齧

  • page_example_description齧 齻 Page example 鹻鹺鹿鹽黅齶鹷齎黕鼳
  • path齧 齎黕鹳鹰鼼齎齌龡鼡鹭鹫 Drupal 7 黾 hook_menu() $items[] 鼽鹢鼼 key鼳 鹠鹞鹛鹘鹗鹕鹑龡鹐鹍鹌鹊鹈齬鹅 structure of routes
  • _controller齧 鹿鹽齎黕鼼齎齌鹄鹁 PageExampleController 黦黢點鼼 description 黚黗鼳
    _content 鸾齻 _controller 鸺齶鸹鸶鸴鸰龡鸺黹 Drupal 8 鸯 Symfony 鸭黇鸫鼳
  • requirements齧黷鸨鸧鸥鸤鸡鸺齶鸠麃鸟鸛鸴鼼鸙鸖鼳

鸒黹黷鸑鸎鼼齎黕鸊鼩龡鹌鹊鹈 Structure of routes 齬鹅鸠鼳

page_example_description:
  path: '/examples/page_example'
  defaults:
    _controller: '\Drupal\page_example\Controller\PageExampleController::description'
  requirements:
    _access: 'TRUE'

page_example_simple:
  path: '/examples/page_example/simple'
  defaults:
    _controller: '\Drupal\page_example\Controller\PageExampleController::simple'
  requirements:
    _permission: 'access simple page'

构建控制器

Page example 鼼黦黢點鸈 PageExampleController龡龥麃鸴齶 description() 黚黗龡黷鸨鹌鸆鸺齶鸠麃鸄鸀龁齃黷鼳

注意:

在模块里,采用了部分 PSR-4 标准,控制器和其他类被要求放在 src/ 目录。 Drupal 的其他部分使用了较长的文件路径,使用的是PSR-0 标准。 如果你看到捐献模块的代码还放在 lib/ 目录,那是 PSR-0,之前的 Drupal 8 进化版本遗留下来的产物, 应该被移动到 src/ 目录。

  1. 黊鹻鹺黁麾麵麱鷿鷼黦黢點鼼黁麾 src/Controller鼳
  2. 麵麱黦黢點齬齨 PageExampleController.php 鼳
  3. 黊齬齨麘鷷鷵 PageExampleController 黦黢點鷴龡麢麞麜麘麕麑

PageExampleController 鷴龥鸴鷱齶鼿鼽齧

  • description() 鼿鼽齧 鷭齆黅齶鷴鷩 Drupal 7 鼼鷨鷦鷣鼽鹢龡鸺龥黷黨鷢 URL::fromRoute 黚黗鼳
  • simple() 鼿鼽齧 鷭齆鷢黅齶 HTML 鼼鷚鷘鼳

鷕鹫鷓黷鷐龡鸺鷍黽黻鹞鷉齬鷈黍黋黊黁鷚 URL 麘鸟鹠鹞鷄鼼鷁鶿麩麥鼳
麩麥黾鼼鶾 8 黏鹿鹽鷢鷴鼼鶻鶸鶶鶵龡鶻鶸鶶鶵鶴鶳黊鶰鶮鶬黚黹黷鸺齶鷴鼳

<?php

/**
* @file
* Contains \Drupal\page_example\Controller\PageExampleController.
*/

namespace Drupal\page_example\Controller;

use Drupal\Core\Url;

/**
* Controller routines for page example routes.
*/
class PageExampleController {
  /**
   * Constructs a page with descriptive content.
   *
   * Our router maps this method to the path 'examples/page_example'.
   */
  public function description() {
    $simple_url = Url::fromRoute('page_example_simple');
    $simple_link = \Drupal::l(t('simple page'), $simple_url);

    $arguments_url = Url::fromRoute('page_example_description', [], ['absolute' => TRUE]);
    $arguments_link = \Drupal::l(t('arguments page'), $arguments_url);

    $build = [
      '#markup' => t(
        '<p>The Page example module provides two pages, "simple" and "arguments".</p>'
          . '<p>The !simple_link just returns a renderable array for display.</p>'
          . '<p>The !arguments_link takes two arguments and displays them, as in @arguments_url</p>',
        [
          '!simple_link' => $simple_link,
          '!arguments_link' => $arguments_link,
          '@arguments_url' => $arguments_url->toString()
        ]
      ),
    ];

    return $build;
  }

  /**
   * Constructs a simple page.
   *
   * The router _controller callback, maps the path 'examples/page_example/simple'
   * to this method.
   *
   * _controller callbacks return a renderable array for the content area of the
   * page. The theme system will later render and surround the content with the
   * appropriate blocks, navigation, and styling.
   */
  public function simple() {
    return [
      '#markup' => '<p>' . t('Simple page: The quick brown fox jumps over the lazy dog.') . '</p>',
    ];
  }

}

鷷鷵鷢鶻鶸鶶鶵鶫龡黽黻鶪鷨鹛鶨鶥 use 鶤鶠鶞鶚鶘鸺鶔鷴龡鹛鶪黹黷鶑黻鼼黚黗鼳

PHP 中的名字空间

“尽管名字空间可以包含任何有效的 PHP 代码,但名字空间只会影响以下代码类型: 类(包括 abstracts 和 traits 类),接口,函数和常量。 名字空间使用 namespace 关键字进行声明。 包含名字空间的文件必须在文件的顶部、任何其他代码(declare 关键字除外)之前进行名字空间的声明。” Defining Namespaces

怎么知道名字空间和 use 操作符的路径?

鶰鷓龡鶻鶸鶶鶵鶎鷍齬齨鸟黊鶋鷼鼼齎齌龡鶉鶫黹黷鸺齶鶠齻 use 鶤鶠鶞黹黷鼼鶅鶻鼳

鷴齬齨鷴鷩鸺鶃齧



namespace Drupal\page_example\Controller;

鵼黅齶鹞黹黷鶑鼼齬齨鸺鶃齧



use Drupal\page_example\Controller

鶉鶫鵸鶎鷨鹛黹黷 Controller 黁麾麈鼼齬齨鷢鼳

使用 use 操作符

“使用别名引用外部的一个完全限定名是名字空间的重要特征。 这类似 unix 文件系统中为文件或目录创建符号链接一样。 PHP 中别名通过 use 操作符完成。” Using namespaces: Aliasing/Importing

菜单链接

Drupal 7 黾黹黷 hook_menu() 鼦麱鼬鼪鵵鵲鼳鵱黊鵮鵫鸺鵧黰黬鷢龡鵥鷍鶨鶥 yml 齬齨鵡鷼鼳

构建链接

黽黻鵱黊黊 Drupal 鵠黬鵟麃鼼 Reports 鼬鼪麈麵麱黅齶鼬鼪鵵鵲鼳
鵜鵘黽黻鹠鹞黊鹻鹺鼼鵖黁麾麈麵麱 page_example.links.menu.yml 齬齨龡黊龥麃鹿鹽鼬鼪鼼鵵鵲齉鶋鷼鼳

  1. 黊鹻鹺黁麾麵麱 page_example.links.menu.yml
  2. 鵓麭麩麥黨齬齨麘龡麢麞麜麘麕麑

鵜鵘黽黻鹿鹽鷢鼬鼪鵵鵲鼼鵏點鶻龡鵲麈鵎鷍鼬鼪鼼鷚鵌齉鼬鼪黹黷鼼齎黕麼鵏點鶻麷龡鷁鶫鷍鼬鼪鼼 parent麼鵉鹿鼬鼪鼼鶋鷼麷鼳

parent 鼼鵆鷍鵃鼬鼪鵵鵲鵏點鶻龡鵀鹿鸺齶鹠鹞鹄 *.links.menu.yml 黒黏鶔齃鹊鼳鵠黬鵟麃鼬鼪鹿鹽黊鴻鴺 System 鹻鹺麘龡鴷鴳鹠鹞鹊鹈 system.links.menu.yml 齬齨鵎鵀鹿鸺齶鵆鼳

鵱黊鴯鶶鴬鴩龡鴥鹕 http://example.com/admin/reports 鸠麃龡鵸鸀鹈黨麮麭鼼鵵鵲鼳

page_example.description:
  title: 'Page Example'
  route_name: page_example_description
  parent: system.admin_reports
page_example.simple:
  title: 'Simple - no arguments'
  route_name: page_example_simple
  parent: system.admin_reports

清空缓存

鴢鴞鹞鶨鶥鴚鴖黏鴒麱 Drupal 8 鴏鴎鴌鴯鶶鴬鴩龡鹠鹞黹黷鷁鹷鴈鷈鼼 drush齧 drush rc

评论 (写第一个评论)