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->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 - 将表单提交到插件控制器操作时出现问题的主要内容,如果未能解决你的问题,请参考以下文章