1

私は CakePHP を初めて使用するので、まだ多くの振る舞いやすべてを学んでいます。私が解決策を見つけるのに苦労しているのは、AppController に beforeRender を使用するコードがあるという事実です。このコードは、アクティビティを記録するために、ユーザーの ID、IP アドレス、現在のページ読み込み時間をデータベースに保存します。

かなり興味深い結果が得られました。答えを探しましたが、見つけることができませんでした。別のコントローラー (この場合は UserController) によって制御されるページをロードすると、データがデータベースに保存され、正確な複製が保存されます。

現在、私はほんの一握りのページしか持っていません。メインのインデックス ページ、ログイン ページ、登録ページ、ユーザー プロファイル ページ、およびユーザー設定ページ。インデックス ページ以外はすべて UserController で制御されますが、ログイン ページと登録ページからのリダイレクトがあるため、それらの URL は /users/login ではなく /login になります。興味深いことに、複製はログイン ページや登録ページでは作成されず、プロファイルと設定ページだけで作成されます。

私はもともとコードを beforeFilter に配置していましたが、同じデータのコピーを 2 つではなく 3 つ取得しました。afterFilter でも試しましたが、まだ 2 つのコピーを取得しています。

私が更新している 3 つのフィールドは、データベースのユーザー テーブルにはありません。独自のテーブル「アクティビティ」があります。

これは、AppController の私の beforeRender コードです。

public function beforeRender() {
    if ($user = $this->Session->read('Auth.User')) {
        $this->loadModel('User');
        $this->loadModel('Activity');
        $data['User']['id'] = $this->Auth->user('id');
        $data['Activity']['user_ip'] = $this->request->clientIp();
        $data['Activity']['user_id'] = $data['User']['id'];
        $data['Activity']['last_activity'] = date("Y-m-d H:i:s");
        $this->Activity->save($data);
    }
}

リクエストごとに、これはプロファイルページのコントローラーアクションであり、重複を引き起こしているものの1つです。

public function profile($id = null) {
        $this->loadModel('User');
        $this->User->id = $id;
        $this->request->data['User']['id'] = $this->Auth->user('id');
        if (!$this->User->exists()) {
            throw new NotFoundException(__('User not found'));
        }
        $user = $this->User->findById($id);
        if (!$user) {
        throw new NotFoundException(__('User not found'));
        }
        $this->set('user', $this->User->read(null, $id));
        $this->set('title_for_layout', $user['User']['screenname'] . "'s" . ' ' . 'Profile');
    }

プロファイル ページのビュー (ほとんどが基本的な HTML です):

<?php echo $this->Html->css('profile');  ?>

<h2><?php echo h($user['User']['screenname']); ?></h2>

<center><table cellpadding="6">
<tr><center>
    <td><center><div class="ha_image"></div>
    </td>
    <td><center><h4>User Information</h4>
    <div class="user_info">
        <table class="">
            <tr>
                <td class="stats_names">
                    Member Type
                </td>
                <td class="stats_stats">
                    --
                </td>
            </tr>
            <tr>
                <td class="stats_names">
                    Member Since
                </td>
                <td class="stats_stats">
                    <?php echo date('M jS, Y', strtotime($user['User']['created'])); ?>
                </td>
            </tr>
            <tr>
                <td class="stats_names">
                    Last Active
                </td>
                <td class="stats_stats">
                    <?php echo date('M j, Y h:i A', strtotime($user['User']['last_active'])); ?>
                </td>
            </tr>
            <tr>
                <td class="laststats_names">
                    Status
                </td>
                <td class="laststats_stats">

                </td>
            </tr>
            <tr>
                <td class="stats_names">
                    Totals
                </td>
                <td class="stats_stats">
                    --
                </td>
            </tr>
            <tr>
                <td class="stats_names">
                    Forum Posts
                </td>
                <td class="stats_stats">
                    --
                </td>
            </tr>
            <tr>
                <td class="stats_names">
                    Achievements
                </td>
                <td class="stats_stats">
                    --
                </td>
            </tr>
            <tr>
                <td class="laststats_names">
                    Quests Done
                </td>
                <td class="laststats_stats">
                    --
                </td>
            </tr>
        </table>
4

1 に答える 1

0

多分それはあなたがのようなものを持っているからです

$this->redirect(array('action' => 'index'));

あなたのコントローラーで。インデックス ページが読み込まれると、 beforeRender 関数が再度呼び出されます。

于 2014-03-27T00:58:17.140 に答える