我是CakePHP和MVC的新手。我正在尝试为我的朋友和家人创建一个Web应用程序。
我想在页面顶部有一个登录表单,以及正文中的事件列表。我希望即使用户未登录也会显示事件。当用户使用顶部的表单登录时,我希望事件列表更新时附加的信息不会显示给未登录的用户英寸
我也想在其他网页上使用类似的功能。
到目前为止我做了什么: 1)创建一个包含我的页眉和页脚的布局。 2)在布局中包含一个自定义的“元素”,即登录表单。
理想情况下,当您输入登录信息时,登录“元素”将发送ajax请求以验证登录。然后它会更新并说出“欢迎用户”之类的内容。我还希望它然后向当前控制器的更新方法发送另一个ajax请求,无论可能是什么。如果有任何依赖于登录的话,当前控制器将改变页面上显示的内容。
这是一个好设计吗? CakePHP是否可行?到目前为止,在搜索中似乎“元素”意味着自包含并且让它调用“当前控制器”的功能似乎很奇怪。
任何帮助都将不胜感激。
谢谢。
答案 0 :(得分:2)
是的,您的设计是可行的。控制器操作始终呈现“视图”。不,你对这个观点的看法取决于你。它可以像元素一样少。
您需要让登录表单/按钮调用登录操作并让它以json的形式呈现返回。您将需要更新登录功能以处理响应ajax请求。这可能很烦人,因此我将提供一些代码。
确保在app控制器中包含RequestHandler组件和Js助手。
app / controllers / users_controller.php:
function login() {
if($this->RequestHandler->isAjax()) {
...
$this->set('status', /*whatever data you want to send*/);
// Explicit call to render an ajax response, using a layout and view made specifically for ajax
$this->layout = 'json';
$this->render('ajax_login');
}
// render views/users/login.ctp like normal
}
您的app / views / layouts / json.ctp文件:
<?php
header("Pragma: no-cache");
header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate");
header('Content-Type: text/x-json');
header("X-JSON: ".$content_for_layout);
echo $content_for_layout;
?>
您的app / views / users / ajax_login.ctp文件:
<?php echo $js->object($status); ?>