Cakephp - 在向插件控制器操作提交表单时遇到问题

时间:2010-07-11 16:47:58

标签: cakephp plugins

我在cakephp已经3岁多了,面临一个有点奇怪的问题 提交表单以插件控制器的操作(我正在使用 插件第一次)。在尝试不同的已知事情后,我发布 这个。

这里直接讨论的问题是我的“论坛”插件的search_controller.php的“索引”视图中的表单:

echo $form->create("Search", array('url'=>array('controller' =>
'search', 'action' => 'index','plugin'=>'forum'),
'id'=>'searchFormMain'));
<input type="text" name="data[Search][keyword]" style="width:357px; margin-left:9px;"><p><span id="searchButton"><input
type="image" src="/img/button_search.jpg" style="height:40px;width:
136px;border:0;" class="handcursor"></span></p>
</form>

因为我正在将此表格提交给搜索控制器的“索引”动作 论坛插件,以下代码没有打印任何内容:

public function index($type='') {
    if(!empty($this->data)) {
        pr($this->data);
        die;
    }
}

如果我在相同的beforeFilter中尝试相同的代码 控制器,即search_controller.php它运行良好,打印为 如下:

Array
(
    [Search] => Array
        (
            [keyword] => Hello Forum
        )

)

最后这里是beforeFilter代码(search_controller.php):

public function beforeFilter() {
    parent::beforeFilter();
    if(!empty($this->data)) {
        pr($this->data);
    }
}

Fyi,如果我注释掉“parent :: beforeFilter();”并不重要。要么 甚至禁用我的控制器的$使用(如果他们看起来很怀疑你) 结果是相同的,即控制不进入“索引”动作 在表格提交的情况下,在页面的情况下工作正常 呼叫。页面的网址/操作是http://localhost.rfdf.org/forum/search/index。 如果我直接调用url它会加载表单,但是当我提交它时,它 永远不会进入控制器的“索引”动作,因此没有视图 呈现。

如果我从“论坛”插件环境中尝试相同的代码集,即在正常的应用程序中它可以正常工作

我过去3个多小时一直试图找到一条出路,但是 没有成功。我很感激任何帮助解决这个难题。

3 个答案:

答案 0 :(得分:1)

我终于明白了!

只要找不到带有表单数据的安全令牌,Securty就会将请求放入blackHole。我了解到“安全”组件“干扰”了$ form-&gt; create()方法,并将每个$ form-&gt; create()调用的标记放置为隐藏字段。在表单提交之后,就在beforeFilter之后,在进入控制器“action”之前,它会检查此令牌并在验证失败时死掉所有内容。不幸的是,没有错误消息或蛋糕日志条目。

在我的情况下,我一直在创建我自己的自定义标记,而不是在$ form-&gt;创建方法的帮助下,因此没有生成令牌导致所有的痛苦。

我通过放置

解决了这个问题
$this->Security->validatePost = false; 
在beforeFilter结束时。

谢谢大家!

答案 1 :(得分:0)

您是否尝试过将其他内容添加到if(!empty($this->data))并执行pr(),因为您的帖子可能不是空的。

您的网址数组或格式不正确。

从ln759,http://api.cakephp.org/view_source/router/#line-757

$defaults = $params = array('plugin' => null, 'controller' => null, 'action' => 'index');

所以我猜你首先需要插件?

答案 2 :(得分:0)

您使用ACL还是其他任何类似的?在beforeFilter中,执行请求的pr。查看请求的操作以确保请求正确