postLink在CakePHP 2.3上生成无效代码

时间:2013-07-18 15:06:56

标签: cakephp cakephp-2.0 cakephp-2.3

我正在使用CakePHP 2.3

我有两个环境,我有我的Web应用程序。在具有完全相同版本的应用程序的测试环境中(所有文件都相同)我遇到了Form->postLink方法的问题。

它在Javascript控制台上显示此错误:

  

未捕获的TypeError:对象#没有方法'submit'用户:119   的onclick

比较两个环境中生成的HTML我可以注意到,此方法生成的属性nameid在同一页面中重复多次(不应该是这样)。

这是用于生成这些帖子链接的代码:

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,其中包含idname的重复值,如您所见:

<!-- 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(&#039;Are you sure you want to delete blabla?&#039;)) { 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(&#039;Are you sure you want to delete blabla22?&#039;)) { document.post_51e8019d095f1.submit(); } event.returnValue = false; return false;">Delete</a>

为什么会这样? 它能以某种方式与Web服务器的配置相关吗?我没有看到它的另一种解释......

感谢。

1 个答案:

答案 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}}