如何在主题中定义自定义路线?

时间:2016-09-20 08:39:48

标签: php drupal routing drupal-8

我是Drupal 7常规用户,但这是我第一次使用Drupal 8。

我正在尝试在我的主题中定义自定义路由,但似乎我的路由文件没有被考虑在内。这是我的主题相关文件:

foo/
  src/
    Controller/
      TestController.php
  templates/
    test/
      list.html.twig
  foo.routing.yml

使用foo.routing.yml

foo.test:
  path: '/test-url'
  defaults:
    _controller: '\Drupal\foo\Controller\TestController::list'
    _title: 'D8 routing test page'
  requirements:
    _permission: 'access content'

TestController.php

<?php

namespace Drupal\foo\Controller;

use Drupal\Core\Controller\ControllerBase;

class TestController extends ControllerBase
{

    public function list() {
        return array(
            '#theme' => 'test/list.html.twig',
            '#bar'   => 'Variable transmission test'
        );
    }

}

我呼叫/test-url时的当前结果不是我的模板,而是标准节点页面,显示所有字段。
我错过了一些让它起作用的东西吗?

1 个答案:

答案 0 :(得分:1)

您应该使用主题名称,而不是渲染数组中的模板路径:

public function list() {
    return array(
        '#theme' => 'list',
        '#bar'   => 'Variable transmission test'
    );
}

此外,默认情况下,Drupal没有列出&#39;&#39;主题,所以你需要将它定义为(在你的foo.theme文件中):

function foo_theme($existing, $type, $theme, $path) {
  return array(
    'list' => array(
      'variables' => array(
        'bar' => NULL
      )
    )
  );

UPD:@zessx补充:路由声明可以在模块中实现,而不是在主题中实现。