我是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
时的当前结果不是我的模板,而是标准节点页面,显示所有字段。
我错过了一些让它起作用的东西吗?
答案 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补充:路由声明可以在模块中实现,而不是在主题中实现。