3

私は Codeigniter サイトに取り組んでおり、訪問者のみ (登録ユーザーではない)のユーザー追跡機能を実装しようとしています。

すべてのページリダイレクトで(IPアドレス、from_page、to_page、time_stamp)を追跡したいのですが、一時的なユーザーのみを追跡したいので、アカウントが存在するかどうかを確認するためにデータベースにもアクセスする必要があります。

私の質問は、Codeigniter が各リダイレクトの前に自動的にチェックするように、コードをどこに書くかです (その場所にはデータベースまたはセッションにアクセスする権利があることに注意してください)。

各コントローラ ファイルをチェックインすると冗長なコードが作成され、htaccess ファイルでは実行できないと思います。

-ありがとう

4

1 に答える 1

1

これを行うには複数の方法があります。

trackuser_helper.php1 つは、ヘルパー フォルダーなどにヘルパー ファイルを作成することです。このファイルで追跡を行う関数を作成します (たとえばtrackUser())。次に、このファイルを次のconfig/autoload.phpように自動ロードします。

/*
| -------------------------------------------------------------------
|  Auto-load Helper Files
| -------------------------------------------------------------------
| Prototype:
|
|   $autoload['helper'] = array('url', 'file');
*/

$autoload['helper'] = array('trackuser'); //ignore the '_helper.php' portion of the filename

trackUser()これで、すべてのコントローラーを呼び出すことができます。

私の意見ではより良い2番目のオプションは、Hooks提供されたものを使用することですCodeIgniter

これらは内部で次のconfig/hooks.phpように定義されています。

$hook['pre_controller'][] = array(
                                'class'    => 'MyClass',
                                'function' => 'Myfunction',
                                'filename' => 'Myclass.php',
                                'filepath' => 'hooks',
                                'params'   => array('param1', 'param2', 'etc')
                                );

配列インデックスは、使用する特定のフック ポイントの名前に対応しています。上記の例では、フック ポイントは pre_controller です。フックポイントのリストは以下にあります。連想フック配列で次の項目を定義する必要があります。

1.Class - 呼び出したいクラスの名前。クラスの代わりに手続き型関数を使用する場合は、この項目を空白のままにします。

2.関数 - 呼び出したい関数名。filename クラス/関数を含むファイル名。

3.Filepath - スクリプトを含むディレクトリの名前。注: スクリプトはアプリケーション フォルダー内のディレクトリに配置する必要があるため、ファイル パスはそのフォルダーからの相対パスになります。たとえば、スクリプトが application/hooks にある場合、単純にフックをファイルパスとして使用します。スクリプトが application/hooks/utilities にある場合は、hooks/utilities をファイルパスとして使用します。末尾のスラッシュはありません。

4.Params - スクリプトに渡したいパラメータ。この項目はオプションです。

これは、各コントローラーがロードされる前に実行する関数呼び出しを指定します。trackuser()この方法では、各に追加する必要さえありませんcontroller。これらのフックはpre_controllerまたはpost_controllerです。フックの詳細については、CI ドキュメントを参照してください。

于 2014-07-27T09:33:02.097 に答える