Я обычный пользователь 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'
по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 нет темы «список», поэтому вам нужно определить ее (в файле foo.theme):
function foo_theme($existing, $type, $theme, $path) { return array( 'list' => array( 'variables' => array( 'bar' => NULL ) ) );
UPD: добавление @zessx: объявление маршрута может быть реализовано в модуле, а не в теме.