我在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个多小时一直试图找到一条出路,但是 没有成功。我很感激任何帮助解决这个难题。
答案 0 :(得分:1)
我终于明白了!
只要找不到带有表单数据的安全令牌,Securty就会将请求放入blackHole。我了解到“安全”组件“干扰”了$ form-&gt; create()方法,并将每个$ form-&gt; create()调用的标记放置为隐藏字段。在表单提交之后,就在beforeFilter之后,在进入控制器“action”之前,它会检查此令牌并在验证失败时死掉所有内容。不幸的是,没有错误消息或蛋糕日志条目。
在我的情况下,我一直在创建我自己的自定义标记,而不是在$ form-&gt;创建方法的帮助下,因此没有生成令牌导致所有的痛苦。
我通过放置
解决了这个问题$this->Security->validatePost = false;
谢谢大家!
答案 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。查看请求的操作以确保请求正确