使用CakePHP中的POST将变量从视图传递到控制器

时间:2014-01-08 14:44:23

标签: cakephp

我是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合作过,请与我分享一些经验。

1 个答案:

答案 0 :(得分:3)

首先,您可以将该行缩短为:

$this->Form->hidden('post_id', array('value' => $post['Post']['id']));

要防止形式篡改,请使用the security component。它会:

  • 限制应用程序接受的HTTP方法。
  • CSRF保护。
  • 表格篡改保护
  • 要求使用SSL。
  • 限制交叉控制器通信。

另外,我会验证处理的任何数据是否有效。因此,您可能希望检查帖子是否存在并且是公开的,例如,以防止人们可以向非公开帖子添加评论。同样的概念适用于所有内容:永远不要信任任何输入,而不是用户和API。始终验证数据和环境。