0

我正在使用 CakePHP 2.3

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

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

Uncaught TypeError: Object # has no method 'submit' users: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服务器的配置有关吗?我没有看到其他解释...

谢谢。

4

1 回答 1

1

该问题是由 IIS 7.0.6000.16386 中的错误和此处uniqid指出的 PHP 函数引起的。

我在两种环境(IIS 7.0.6000.16386 vs IIS 7.5.7600.16385)中使用的版本略有不同,这就是问题的原因。

为了解决它,我修改了文件,将函数内lib/Cake/View/Helper/FormHelper.php的行更改为:$formName = uniqid('post_');postLink

$formName = uniqid('post_', true);

这增加了更多的熵,正如文档所说:

如果设置为 TRUE,uniqid() 将在返回值的末尾添加额外的熵(使用组合的线性同余生成器),这增加了结果唯一的可能性。

更新

由于表单中的 javascript 问题,最终不得不再添加一项更改。我又添加了一行,$formName = uniqid('post_', true);所以它看起来像:

$formName = uniqid('post_', true);
$formName = str_replace('.', '', $formName);
于 2013-07-19T09:46:27.597 回答