Cakephp - 将表单提交到插件控制器操作时出现问题

Posted

技术标签:

【中文标题】Cakephp - 将表单提交到插件控制器操作时出现问题【英文标题】:Cakephp - Having Issue when submitting form to plugin controller action 【发布时间】:2010-07-11 16:47:58 【问题描述】:

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

这里直截了当是我的“论坛”插件的 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);
    

仅供参考,如果我注释掉“parent::beforeFilter();”也没关系或者 甚至禁用我的控制器的 $uses (如果他们看起来对你有疑问) 结果是相同的,即控件没有进入“索引”操作 在表单提交的情况下,在页面的情况下工作正常 称呼。页面的 url/action 是http://localhost.rfdf.org/forum/search/index。 如果我直接调用 url,它会很好地加载表单,但是当我提交它时,它 永远不会进入控制器的“索引”操作,因此没有视图 渲染。

如果我在“论坛”插件环境中尝试相同的代码集,即在普通应用程序中它工作得很好

过去 3 个多小时以来,我一直在努力寻找解决办法,但是 没有成功。我将不胜感激任何帮助解决这个难题。

【问题讨论】:

【参考方案1】:

我终于明白了!

当 Securty 组件未能找到包含表单数据的安全令牌时,它会将请求放入黑洞。我了解到“安全”组件“干扰”了 $form->create() 方法,并在每个 $form->create() 调用中放置了一个令牌作为隐藏字段。在表单提交上,就在 beforeFilter 之后和进入控制器“动作”之前,它会检查这个令牌,并在验证失败时简单地死掉一切。不幸的是,蛋糕日志中没有错误消息或条目。

在我的例子中,我一直在创建自己的自定义标签,而不是在 $form->create 方法的帮助下,所以没有生成令牌,这会导致所有的痛苦。

我通过放置解决了它

$this->Security->validatePost = false; 

在 beforeFilter 的末尾。

谢谢大家!

【讨论】:

【参考方案2】:

您是否尝试在 if(!empty($this-&gt;data)) 中添加 else 并执行 pr(),因为这可能是您的帖子不为空。

要么你的 url 数组的格式不正确。

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

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

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

【讨论】:

这是我的 beforeFilter 代码: public function beforeFilter() parent::beforeFilter(); $this->Auth->allowedActions = array("*"); if(!empty($this->data)) pr($this->params);这是我的“索引”操作的顶部: if (!empty($this->data)) pr($this->data); 其他 打印(“空”);在表单提交的情况下,“索引”内既不打印 $this->data 也不打印“空”。在论坛提交的情况下,它根本不会进入“索引”操作。请在下一条评论中检查打印在 beoforeFilter 中的 $this->params 的输出是否存在任何 url 故障。 Array ( [pass] => Array() [named] => Array() [plugin] => forum [controller] => search [action] => index [url] => Array ( [ext] => html [url] => forum/search/index ) [form] => Array() [data] => Array( [Search] => Array( [keyword] => Hello Forum [高级] => 0 ) [Topic] => Array( [power] => 0 [category] ​​=> [title] => [auther] => [sortby] => Relevance [results_per_page] => 10 ) ) )【参考方案3】:

您是否使用 ACL 或任何类似的?在 beforeFilter 中,对请求做一个 pr。查看请求的操作以确保请求正确

【讨论】:

以上是关于Cakephp - 将表单提交到插件控制器操作时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

将输入字段添加到所有表单中 - cakephp

如何在 cakephp 中通过 ajax 提交 jquery 移动弹出表单

CakePHP 上传插件 - 行为设置

为什么在提交表单时出现500错误?

Cakephp中的AJAX文件输入图片上传

将 ajax 表单提交到 PHP 脚本时出现问题