1

これはCakePHP1.3です

各ステップの後に新しいセッションデータを保存する5ステップの注文フォームがあります。これは、ユーザーが注文を完了する最後のステップまで、すべてのステップで完全に機能します。

最後のステップで、注文を保存し、セッションフラグを設定して完了したことを示します。このように、ユーザーがページを更新しても、別の注文を再度行うことはありません。

問題は、セッションにフラグを設定し、セッションをデバッグするとそこにあることです。ページの更新時に、セッションは新しい値なしで以前の状態に完全に戻りました。

// Controller action for step 5 of the form

public function step5() {

    // FIRST DEBUG
    debug($this->Session->read('order'));

    // Load from session so that the view can display the order information
    $this->data = $this->Session->read('order');

    // Save order if not already completed
    if (!$this->Session->check('order.complete')) {

        // Adds to the database
        if ($this->_saveOrder($this->data)) {

            // Set flag so if the user refreshes, it won't save again
            $this->Session->write('order.complete', true);

            // SECOND DEBUG
            debug($this->Session->read('order'));

        }
    }
}

ページが読み込まれるときの最初のデバッグでは、セッションは次のようになります。

Array
(
    [Order] => Array
        (
            [value1] => 4566
            [value2] => 'test'
            [value3] => 0
            [value4] => 0
        )
    [Customer] => Array
        (
            [fname] => test
            [sname] => test
            [email] => test@torg.co.uk
            [tel] => 0123456789
        )

)

次に、2番目のデバッグは、新しいセッションフラグがセッションに書き込まれたことを示します。

 Array
(
    [Order] => Array
        (
            [value1] => 4566
            [value2] => 'test'
            [value3] => 0
            [value4] => 0
        )
    [Customer] => Array
        (
            [fname] => test
            [sname] => test
            [email] => test@torg.co.uk
            [tel] => 0123456789
        )
    ['complete'] => true

)

しかし、ページを更新すると、completeフラグがなくなり、セッションは以前の状態に完全に戻り、フラグがないために保存が再度実行されます。フラグが書き込まれた後はコードがないため、フラグは削除されません。

Array
(
    [Order] => Array
        (
            [value1] => 4566
            [value2] => 'test'
            [value3] => 0
            [value4] => 0
        )
    [Customer] => Array
        (
            [fname] => test
            [sname] => test
            [email] => test@torg.co.uk
            [tel] => 0123456789
        )

)

セッションの書き込みは、他のすべてのステップで正常に機能します。ページ間でセッション変数を追加/更新できます。これらは正常に機能し、ページ間およびページの更新間で保持されます。

これが私の設定設定と関係があるのか​​、それとも何なのかわかりません。このページだけでなぜこれが起こっているのかわかりません。また、ごくまれに、AGESのために髪を引き裂き、キャッシュを数回クリアした後などに気づきました。一時的に機能するように見えた後、再び機能しなくなることがあります。

それは私の設定設定と関係がありますか?Config/core.phpこれがコメントなしの私のです:

Configure::write('debug', 2);

Configure::write('log', true);

Configure::write('App.encoding', 'UTF-8');

Configure::write('App.baseUrl', 'components/com_cake/app');

//Configure::write('Routing.prefixes', array('admin'));

//Configure::write('Cache.disable', true);

//Configure::write('Cache.check', true);

define('LOG_ERROR', 2);

Configure::write('Session.save', 'php');

//Configure::write('Session.model', 'Session');

//Configure::write('Session.table', 'cake_sessions');

//Configure::write('Session.database', 'default');

Configure::write('Session.cookie', 'CAKEPHP');

Configure::write('Session.timeout', '120');

Configure::write('Session.start', true);

Configure::write('Session.checkAgent', true);

Configure::write('Security.level', 'medium');

Configure::write('Security.salt', 'd1a4bfb8a3cxxxxx47173663e9e2e9ea5');

Configure::write('Security.cipherSeed', '1269383xxxxxxxxxx3672219');

Configure::write('Asset.timestamp', 'force');

//Configure::write('Asset.filter.css', 'css.php');

//Configure::write('Asset.filter.js', 'custom_javascript_output_filter.php');

Configure::write('Acl.classname', 'DbAcl');
Configure::write('Acl.database', 'default');

//date_default_timezone_set('UTC');

Cache::config('default', array('engine' => 'File'));
4

1 に答える 1

1

これは私が理解するのに絶対に永遠にかかりましたが、問題は実際にはJoomlaフレームワーク内でCakePHPコンポーネントを使用していたことであり、Cakeのデータベース抽象化レイヤーの代わりにPHPのネイティブmysqli関数を使用して別のデータベースを選択する必要がありました。

何が起こったのかというと、選択したMySQLデータベースを変更したため、Joomlaから発生したが、Cakeでのみ明らかになった、微妙で一見説明できない問題が大量に発生しました。

AppController::beforeRender()解決策は、私の方法で、Joomlaが必要とするデータベースに確実に戻ることでした。

于 2012-10-04T11:50:13.607 に答える