感谢你来到这里
我真的很激动
盼望,能有你的支持
捐赠可扫描二维码转账支付
支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
当所有配置资源(configuration resources)被加载后,你可能想要处理配置值,并把它们合并成一个文件。这个文件在使用时很像缓存。其内容毋须在每次程序运行时重新生成——只在配置资源发生改变时(才需要生成)。
例如,Symofny路由组件允许你加载所有路由,然后再基于它们剥离出一个URL matcher或是URL generator(文件)。本例中,当资源文件之一发生改变时(并且你正处于dev环境),那么已生成的文件将会失效并且再次生成。这可以通过使用ConfigCache
类来完成。
下例向你展示了如何收集资源,然后基于这些资源来生成一些代码,最后把代码写入缓存。缓存也能接收“用于生成代码”的资源之集合。通过对比这些资源的“last modified”(上一次修改于)时间戳,缓存可以明确资源是否仍然fresh(新鲜),还是说资源内容必须要重新生成:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | use Symfony\Component\Config\ConfigCache;
use Symfony\Component\Config\Resource\FileResource;
$cachePath = __DIR__.'/cache/appUserMatcher.php';
// the second argument indicates whether or not you want to use debug mode
// 第二个参数指明你是否要使用debug模式
$userMatcherCache = new ConfigCache($cachePath, true);
if (!$userMatcherCache->isFresh()) {
// fill this with an array of 'users.yml' file paths
// 用一个类似'user.yml'的文件路径之数组来填充此变量
$yamlUserFiles = ...;
$resources = array();
foreach ($yamlUserFiles as $yamlUserFile) {
// see the previous article "Loading resources" to
// see where $delegatingLoader comes from
// 参考上一篇文章“加载资源”来了解$delegatingLoader来自哪里
$delegatingLoader->load($yamlUserFile);
$resources[] = new FileResource($yamlUserFile);
}
// the code for the UserMatcher is generated elsewhere
// 用于UserMatcher的代码被生成到某个地方
$code = ...;
$userMatcherCache->write($code, $resources);
}
// you may want to require the cached code:
// 你可能需要这个缓存了的代码
require $cachePath; |
在debug调试模式中,有个.meta
文件将被创建到与缓存文件自身所在的相同目录中。这个.meta
文件包含了序列化的资源,它们的时间戳被用于决定缓存是否新鲜。当不在调试模式时,缓存在创建之后即被认为是“新鲜的”,因此并没有.meta
文件被生成。
本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。