Как вы передаете маршрут нескольким узлам?

Я работаю над преобразованием сайта drupal 7 в drupal 8 для некоторой практики с 8. На моем сайте drupal 7 у меня есть пользовательское объявление hook_menu со следующим:

function solution_menu() {
  $items = array();
  $items['solution/%node/%node/%node'] = array(
    'title' => '',
    'page callback' => 'solution_build_solution',
    'page arguments' => array(1,2,3),
    'access callback' => 1,
    'type' => MENU_CALLBACK,
  );
  return $items;
}

function solution_build_solution($solution_node, $species_node, $problem_node) {
   //build solution
}

Я пытаюсь выполнить то же самое в drupal 8 с помощью маршрута. Однако, если я попробую что-то вроде следующего, я получаю сообщение об ошибке:

wlh_decision.solution:
  path: '/solution/{node}/{node}/{node}'
  defaults:
    _content: '\Drupal\wlh_decision\Controller\SolutionController::displaySolution'
    _title: 'Solution:'
    _title_callback: '\Drupal\wlh_decision\Controller\SolutionController::solutionTitle'
  requirements:
    _permission: 'access content'

Ошибка, которую я получаю:

LogicException: Route pattern "/solution/{node}/{node}/{node}" cannot reference variable name "node" more than once. in Symfony\Component\Routing\RouteCompiler::compilePattern() (line 106 of /Users/brianwilliams/Sites/MAMP/drupal8/core/vendor/symfony/routing/Symfony/Component/Routing/RouteCompiler.php).

, но если я изменю его на использование имен, отличных от узла, я не получаю автозагрузку.

Кто-нибудь знает, как я могу справиться с этим?

4 голоса | спросил Brian Williams 13 42014vEurope/Moscow11bEurope/MoscowThu, 13 Nov 2014 21:40:50 +0300 2014, 21:40:50

1 ответ


9

Вы можете указать тип upcast для параметров вручную:

wlh_decision.solution:
  path: '/solution/{solution_node}/{species_node}/{problem_node}'
  defaults:
    _content: '\Drupal\wlh_decision\Controller\SolutionController::displaySolution'
    _title: 'Solution:'
    _title_callback: '\Drupal\wlh_decision\Controller\SolutionController::solutionTitle'
  requirements:
    _permission: 'access content'
  options:
    parameters:
      solution_node:
        type: entity:node
      species_node:
        type: entity:node
      problem_node:
        type: entity:node

См. Использование параметров в маршрутах для более подробного объяснения.

ответил Clive 13 42014vEurope/Moscow11bEurope/MoscowThu, 13 Nov 2014 21:50:44 +0300 2014, 21:50:44

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132