我正在使用CakePHP 2.3
我有两个环境,我有我的Web应用程序。在具有完全相同版本的应用程序的测试环境中(所有文件都相同)我遇到了Form->postLink
方法的问题。
它在Javascript控制台上显示此错误:
未捕获的TypeError:对象#没有方法'submit'用户:119 的onclick
比较两个环境中生成的HTML我可以注意到,此方法生成的属性name
和id
在同一页面中重复多次(不应该是这样)。
这是用于生成这些帖子链接的代码:
foreach($users as $user){
$delete = $this->Form->postLink(__('Delete'), array('action' => 'delete', $user['user_id']), __('Are you sure you want to delete %s?', $user['user_id']));
}
这是有问题的生成的HTML,其中包含id
和name
的重复值,如您所见:
<!-- link 1 -->
<form action="delete/1/" name="post_51e8019d095f1" id="post_51e8019d095f1" style="display:none;" method="post">
<input type="hidden" name="_method" value="POST"/>
</form>
<a href="#" onclick="if (confirm('Are you sure you want to delete blabla?')) { document.post_51e8019d095f1.submit(); } event.returnValue = false; return false;">Delete</a>
<!-- link 2 -->
<form action="delete/2/" name="post_51e8019d095f1" id="post_51e8019d095f1" style="display:none;" method="post">
<input type="hidden" name="_method" value="POST"/>
</form>
<a href="#" onclick="if (confirm('Are you sure you want to delete blabla22?')) { document.post_51e8019d095f1.submit(); } event.returnValue = false; return false;">Delete</a>
为什么会这样? 它能以某种方式与Web服务器的配置相关吗?我没有看到它的另一种解释......
感谢。
答案 0 :(得分:1)
问题是由IIS 7.0.6000.16386中的错误和PHP函数uniqid
引起的here所致。
我在两种环境中使用的版本略有不同(IIS 7.0.6000.16386与IIS 7.5.7600.16385),这就是问题的原因。
为了解决这个问题,我修改了lib/Cake/View/Helper/FormHelper.php
将$formName = uniqid('post_');
函数中的行postLink
修改为$formName = uniqid('post_', true);
的文件:
$formName = uniqid('post_', true);
这增加了更多的熵,正如文档所说:
如果设置为TRUE,uniqid()将在返回值的末尾添加额外的熵(使用组合的线性同余生成器),这会增加结果唯一的可能性。
由于表单中的javascript问题,我们不得不再添加一个更改。
我在$formName = uniqid('post_', true);
$formName = str_replace('.', '', $formName);
之后添加了一行,所以它看起来像:
{{1}}