如何解决清除缓存后不会重新创建动态路由
我正在尝试根据从第三方服务(也是另一个 Drupal 网站)提取的数据创建动态路由。启用保留此动态路由的自定义模块时会创建路由,但清除缓存时不会重新创建这些动态路由。源 Drupal 网站公开 Drupal 内容,此目标站点需要使用来自源 Drupal 站点的路径别名创建路由。
任何有关更好实施的指南/提示将不胜感激。
这就是我创建动态路由的方式:
<?PHP
namespace Drupal\demo_module\Routing;
use Symfony\Component\Routing\Route;
/**
* Defines dynamic routes.
*/
class DynamicRoutes {
/**
* {@inheritdoc}
*/
public function routes() {
$routes = [];
// This is the service for pulling data. It pulls data from another drupal sites.
$demoService = \Drupal::service('demo_module.service');
// Just checks if service is available.
if ($demoService->isAvailable()) {
try {
$demoData = $demoService->getDataFromServices();
if (isset($demoData['data']) && count($demoData['data']) > 0) {
foreach ($demoData['data'] as $data) {
$alias = $data['attributes']['path']['alias'];
if (isset($alias) && !empty($alias)) {
$route_provider = \Drupal::service('router.route_provider');
$routeName = 'demo_module.' . ltrim($alias,'/');
$exists = count($route_provider->getRoutesByNames([$routeName])) === 1;
if (!$exists) {
// Want to add .pdf at the end of route name. So the route name would be the path alias from the source drupal site plus .pdf appended.
$routes[$routeName] = new Route(
'/' . $alias . '.pdf',[
'_controller' => '\Drupal\demo_module\Controller\DemoModuleController::getData','_title' => 'Demo Data',],[
'_permission' => 'access content',]
);
}
}
}
}
}
catch (\Exception $e) {
throw new \Exception($e->getMessage());
}
}
return $routes;;
}
}
这是如何将路由添加到 demo_module.routing.yml
route_callbacks:
- '\Drupal\demo_module\Routing\DynamicRoutes::routes'
解决方法
似乎路由被缓存了(而不是通过清除缓存来清除??)。
根据{{3}}判断,可以设置路由不缓存。
例如。
$routes[$routeName] = new Route(
'/' . $alias . '.pdf',[
'_controller' => '\Drupal\demo_module\Controller\DemoModuleController::getData','_title' => 'Demo Data',],[
'_permission' => 'access content',[
'no_cache' => TRUE
]
);
我没有测试上面的代码,但这是我要尝试的第一件事,docs here
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。