我有以下路线
my_module.order_details:
path: '/account/orders/{orderId}'
Drupal 8中有什么方法可以一次转换此路由路径?
对于所有其他路线,我一直想用一种我需要翻译的语言添加一个URL别名。但是,因为它的参数{orderId}似乎无效,所以我无法找到一种在URL别名中添加通配符的方法。(我认为这可以解决我的问题)
我知道我可以为每个orderId创建一个翻译后的URL别名,但如果可能的话,我想避免这种情况。
谢谢
答案 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
(获取示例路由参数)