如何在主题中定义自定义路由?
How to define custom routes in theme?
我是 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
时的当前结果不是我的模板,而是标准的节点页面,显示了所有字段。
我是否遗漏了一些让它发挥作用的东西?
您应该使用主题名称,而不是渲染数组中的模板路径:
public function list() {
return array(
'#theme' => 'list',
'#bar' => 'Variable transmission test'
);
}
此外,默认情况下,Drupal 没有 'list' 主题,因此您需要将其定义为(在您的 foo.theme 文件中):
function foo_theme($existing, $type, $theme, $path) {
return array(
'list' => array(
'variables' => array(
'bar' => NULL
)
)
);
更新:@zessx 补充:路由声明可以在模块中实现,而不是在主题中实现。
我是 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
时的当前结果不是我的模板,而是标准的节点页面,显示了所有字段。
我是否遗漏了一些让它发挥作用的东西?
您应该使用主题名称,而不是渲染数组中的模板路径:
public function list() {
return array(
'#theme' => 'list',
'#bar' => 'Variable transmission test'
);
}
此外,默认情况下,Drupal 没有 'list' 主题,因此您需要将其定义为(在您的 foo.theme 文件中):
function foo_theme($existing, $type, $theme, $path) {
return array(
'list' => array(
'variables' => array(
'bar' => NULL
)
)
);
更新:@zessx 补充:路由声明可以在模块中实现,而不是在主题中实现。