我想在CakePHP中使用html5缓存清单技术,但是我不知道在CakePHP中将缓存清单放在哪里,我已经搜索了一个解决方案,但我没有找到任何东西。你能帮助我吗?
3 回答
在所有视图中访问一个清单文件的最佳和最简单的方法是查看您的布局,例如
View/Layouts/default.ctp
并替换<html>
为
<?php echo "<html manifest='".$this->webroot."manifest.php'>"; ?>
manifest.php 所在的位置
app/webroot/manifest.php
看起来像这样:
<?php
header('Content-Type: text/cache-manifest');
echo "CACHE MANIFEST\n";
echo "\n\nNETWORK:\n";
echo "*\n";
echo "\n\nCACHE:\n";
echo "# Version: 1\n";
?>
所以 manifest.php 只需要一次,可以用于所有视图。
提示:
对于动态清单文件,您可以使用此处的代码片段:http:
//nial.me/2010/01/using-the-html5-cache-manifest-with-dynamic-files/
我尝试了这个解决方案,将清单放在 default.ctp 中,但它会导致一些问题,我所有的页面都被缓存了......我认为它在规范中有所描述“......即使它引用了清单的页面也会自动缓存没有明确提及”。
...因为我所有的页面都被缓存了,在每个页面中都检查了清单。当另一个用户登录时,他们会看到最后一个用户主页和其他页面。
最终解决方案:创建重定向/加载页面
1 - 创建重定向页面: 我在 Pages 控制器中创建了 Pages/redirect.ctp 文件和函数 redirect(){}。一个简单的页面,只有一条 hello 消息和一个基于 applicationCache 进度事件的加载栏:
var appCache = window.applicationCache;
appCache.addEventListener('progress', function(event) { console.log(event.loaded + " of " + event.total + " files..."); //对页面的加载栏做一些修改 },错误的);
2 - 仅在重定向页面中加载清单: 在 View/Layouts/default.ctp 我过滤标签以仅在重定向页面中显示清单:
<? if($this->request->params['controller']=='pages' &&
$this->request->params['action']=='redirect'): ?>
<html manifest="<? =$this->webroot?>manifest.php">
<? 其他:?>
<html>
<? 万一; ?>
3 - 使用 auth 组件中的重定向页面引导我的用户
在登录后重定向页面:
在 appController 中设置了这样的 auth 组件
public $components = array (
'Session',
'Auth' => array (
'authError' => "用户或密码无效",
'unauthorizedRedirect' => "/pages/redirect?err=login",
'loginRedirect' => "/pages/redirect",
'logoutRedirect' => "/",
'loginAction' => "/user/login",
'authorize' => array ('Controller')
)
);
现在只有放在清单中的元素会被缓存。重定向页面被缓存(根据规范),但 applicationCache 事件更新页面撕裂这个“动态”。
如果你的意思是清单文件应该进入 /app/webroot,你的虚拟主机也应该用于站点的目录。除此之外,与 CakePHP 没有任何关系。
看看这个:http ://www.html5rocks.com/en/tutorials/appcache/beginner/