使用参数转换Drupal 8自定义路由路径

时间:2019-07-01 13:17:34

标签: routing drupal-8 translate

我有以下路线

my_module.order_details:
    path: '/account/orders/{orderId}'

Drupal 8中有什么方法可以一次转换此路由路径?

对于所有其他路线,我一直想用一种我需要翻译的语言添加一个URL别名。但是,因为它的参数{orderId}似乎无效,所以我无法找到一种在URL别名中添加通配符的方法。(我认为这可以解决我的问题)

我知道我可以为每个orderId创建一个翻译后的URL别名,但如果可能的话,我想避免这种情况。

谢谢

1 个答案:

答案 0 :(得分:0)

具有动态路线的路线转换示例:

your_module.routing.yml

route_callbacks:
  - '\Drupal\your_module\DynamicRoutes\DynamicRoutes::routes'

your_module / src / DynamicRoutes / DynamicRoutes.php

<?php

namespace Drupal\your_module\DynamicRoutes;

use Symfony\Component\Routing\Route;
use Symfony\Component\Routing\RouteCollection;


/**
 * Listens to the dynamic trousers route events.
 */
class DynamicRoutes {

  public function routes(){
    $route_collection = new RouteCollection();


    $route_lang_en = new Route(
      // path
      '/example-lang-en',
      // defaults
      [
        // example controller
        '_controller' => '\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage',
        '_title' => 'Your title en'
      ],
      // requirements:
      [
        '_permission' => 'access content',
      ]
    );
    $route_collection->add('example.language_en', $route_lang_en);

    $route_lang_fr = new Route(
      '/example-lang-fr',
      [
        '_controller' => '\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage',
        '_title' => 'Your title fr'
      ],
      ['_permission' => 'access content']
    );
    $route_collection->add('example.language_fr', $route_lang_fr);

    return $route_collection;
  }
}

此功能等效于:

example.language_en:
  path: '/example-lang-en'
  defaults:
    _controller => '\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage',
    _title => 'Your title en'
  requirements:
    _permission: 'access content'

example.language_fr:
  path: '/example-lang-fr'
  defaults:
    _controller => '\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage',
    _title => 'Your title fr'
  requirements:
    _permission: 'access content'

以上代码仅供参考。但是,我建议使用一些自定义可重用的方法来构建路由,该方法可迭代所有语言,并为path_title进行自定义翻译,而_controller'_permission'和任何其他不可翻译的方法数据在每次路由转换中都会重复使用。

对于调试路由drupal console非常有用

drupal dr(列出所有路线)

drupal dr example.language_en(获取示例路由参数)

drupal dr example.language_fr(获取示例路由参数)