我是CakePHP的新手,我正在尝试做类似博客的练习,然后遇到了一些问题。
查看有一个名为Post
的模型,然后在PostsController
下我生成一个view
操作来检查单个博文。我想要的是允许用户能够在Posts/view
页面中为帖子添加评论,而不是重定向到新的Comments/add
页面。为此,我需要告诉我的CommentsController
用户正在评论哪个帖子。所以在我的/app/View/Posts/view.ctp
中写了这个:
<?php
echo $this->Form->create('Comment', array('controller' => 'comments', 'action' => 'add');
echo $this->Form->input('content', array('row' => '3'));
// this is the line I'm not sure about
echo $this->Form->input('post_id', array('default' => $post['Post']['id'], 'type' => 'hidden'));
echo $this->Form->end('Submit');
?>
现在,此解决方案会以$post['Post']['id']
的形式将add
的值CommentsController
发送给$this->request->data['post_id']
,但是请叫我肛门,我担心是否这个这是正确的,或“专业”的方式,因为通过任何现代浏览器内部的“检查元素”改变一些属性,可以轻松地使隐藏的字段可见,不一定留下潜在的安全漏洞,但我个人不喜欢我觉得很舒服。所以,如果有人以前和CakePHP合作过,请与我分享一些经验。
答案 0 :(得分:3)
首先,您可以将该行缩短为:
$this->Form->hidden('post_id', array('value' => $post['Post']['id']));
要防止形式篡改,请使用the security component。它会:
另外,我会验证处理的任何数据是否有效。因此,您可能希望检查帖子是否存在并且是公开的,例如,以防止人们可以向非公开帖子添加评论。同样的概念适用于所有内容:永远不要信任任何输入,而不是用户和API。始终验证数据和环境。