设计指南 - CakePHP和MVC的新功能

时间:2011-04-24 16:42:11

标签: cakephp

我是CakePHP和MVC的新手。我正在尝试为我的朋友和家人创建一个Web应用程序。

我想在页面顶部有一个登录表单,以及正文中的事件列表。我希望即使用户未登录也会显示事件。当用户使用顶部的表单登录时,我希望事件列表更新时附加的信息不会显示给未登录的用户英寸

我也想在其他网页上使用类似的功能。

到目前为止我做了什么: 1)创建一个包含我的页眉和页脚的布局。 2)在布局中包含一个自定义的“元素”,即登录表单。

理想情况下,当您输入登录信息时,登录“元素”将发送ajax请求以验证登录。然后它会更新并说出“欢迎用户”之类的内容。我还希望它然后向当前控制器的更新方法发送另一个ajax请求,无论可能是什么。如果有任何依赖于登录的话,当前控制器将改变页面上显示的内容。

这是一个好设计吗? CakePHP是否可行?到目前为止,在搜索中似乎“元素”意味着自包含并且让它调用“当前控制器”的功能似乎很奇怪。

任何帮助都将不胜感激。

谢谢。

1 个答案:

答案 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); ?>