0

私はCakePHP 2.3を使用しています

Web アプリケーションがある 2 つの環境があります。まったく同じバージョンのアプリケーション (すべてのファイルが同じ) を使用したテスト環境で、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']));
}

これは、ご覧のとおり、idとの値が繰り返される、問題のある生成された HTMLです。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(&#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 対 IIS 7.5.7600.16385) でわずかに異なるバージョンを使用しており、それが問題の原因でした。

それを解決するために、関数内のlib/Cake/View/Helper/FormHelper.php行を次のように変更するファイルを変更しました。$formName = uniqid('post_');postLink

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

それはより多くのエントロピーを追加し、ドキュメントが言うように:

TRUE に設定すると、uniqid() は戻り値の末尾に追加のエントロピーを追加し (結合された線形合同ジェネレーターを使用)、結果が一意になる可能性を高めます。

アップデート

フォームの JavaScript に問題があるため、もう 1 つ変更を加える必要がありました。後にもう1行追加した$formName = uniqid('post_', true);ので、次のようになります。

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