Caching 如何更新特定的缓存路由?
我正在运行一个Symfony2应用程序,我有一个关于缓存的问题 这里有一句话是这样说的: 您可以创建一个仅更新此缓存路由的命令。或 也许考虑使用一个新注册的内核事件侦听器 如果您能够承受性能影响,请根据每个请求进行路由Caching 如何更新特定的缓存路由?,caching,symfony,url-routing,Caching,Symfony,Url Routing,我正在运行一个Symfony2应用程序,我有一个关于缓存的问题 这里有一句话是这样说的: 您可以创建一个仅更新此缓存路由的命令。或 也许考虑使用一个新注册的内核事件侦听器 如果您能够承受性能影响,请根据每个请求进行路由 如何仅更新这一条缓存路由?缓存路由存储在哪里? url匹配/生成的缓存类可以在app/cache/environment中找到,它们被称为appEnvironmentUrlGenerator.php和appEnvironmentUrlGenerator.php,其中“enviro
如何仅更新这一条缓存路由?缓存路由存储在哪里? url匹配/生成的缓存类可以在
app/cache/environment
中找到,它们被称为appEnvironmentUrlGenerator.php
和appEnvironmentUrlGenerator.php
,其中“environment”是dev
,prod
。。等等
API参考:
它是如何工作的?
路由器服务在构造时接收url匹配器和url生成器。然后在路由器的match()
和generate()
方法中使用这些方法
为了预热缓存,使用路由器的
warmUp()
方法(如果实现)。缓存路由存储在哪里?
url匹配/生成的缓存类可以在app/cache/environment
中找到,它们被称为appEnvironmentUrlGenerator.php
和appEnvironmentUrlGenerator.php
,其中“environment”是dev
,prod
。。等等
API参考:
它是如何工作的?
路由器服务在构造时接收url匹配器和url生成器。然后在路由器的match()
和generate()
方法中使用这些方法
为了预热缓存,使用路由器的
warmUp()
方法(如果实现)。nifr编写的所有内容都是正确的,但并不能真正帮助您。Symfony的内置路由器旨在支持“静态”路由,因此在第一次缓存预热时,将生成并缓存路由。如果检查提到的缓存文件,您将看到路由保存在一个静态私有变量中 没有简单的方法可以更新路线(或更改路线)
- 使用Symfony2 CMF 对于您的简单问题,这是一个有点复杂的解决方案:
- 正在清除(使缓存无效)
$cacheDir = $this->container->getParameter("kernel.cache_dir");
// Delete routing cache files
$filesystem = $this->container->get('filesystem');
$finder = new Finder();
/** @var File $file */
foreach ($finder->files()->depth('== 0')->in($cacheDir) as $file) {
if (preg_match('/UrlGenerator|UrlMatcher/', $file->getFilename()) == 1) {
$filesystem->remove($file->getRealpath());
}
}
$router = $this->container->get('router');
$router->warmUp($cacheDir);
- 重写默认路由器类
nifr所写的一切都是真实的,但并不能真正帮助你。
Symfony的内置路由器旨在支持“静态”路由,因此在第一次缓存预热时,将生成并缓存路由。如果检查提到的缓存文件,您将看到路由保存在一个静态私有变量中 没有简单的方法可以更新路线(或更改路线)
- 使用Symfony2 CMF 对于您的简单问题,这是一个有点复杂的解决方案:
- 正在清除(使缓存无效)
$cacheDir = $this->container->getParameter("kernel.cache_dir");
// Delete routing cache files
$filesystem = $this->container->get('filesystem');
$finder = new Finder();
/** @var File $file */
foreach ($finder->files()->depth('== 0')->in($cacheDir) as $file) {
if (preg_match('/UrlGenerator|UrlMatcher/', $file->getFilename()) == 1) {
$filesystem->remove($file->getRealpath());
}
}
$router = $this->container->get('router');
$router->warmUp($cacheDir);
- 重写默认路由器类
要求类似的东西。我会尽力提供一些有用的信息。要求类似的东西。我会尽力提供一些有用的信息。好吧,这对我的问题来说似乎太复杂了。因此,我将检查我的错误是否再次发生。如果是的话,我想我会简单地修改我的代码,这样我就可以省略这个变通方法。好吧,这对我的工作来说似乎太复杂了