6

すべて共通の情報を共有する必要があるいくつかのメソッドを持つコントローラーがあります。私のURI形式が次のようなものだとしましょう:

http://server/users/id/admin/index
http://server/users/id/admin/new
http://server/users/id/admin/list
http://server/users/id/admin/delete

モデルを呼び出すために各メソッドに行を書き込むのではなく、データベースからいくつかの情報を取得しid、すべてのメソッドで利用できるようにする必要があります。これどうやってするの?

4

3 に答える 3

4
class users extends Controller {

 private $mydata = array();

 function users()
 {   
     parent::Controller();
     ....

     $this->mydata = $this->model->get_stuff($this->uri->segment(2));
 }

 function index()
 { 
     $this->mydata; //hello data!
 }

ここでは、単に配列をハードコーディングしました (これはおそらく非常に悪い考えです)。それでも、必要に応じてデータを codeigniter セッションに保存できます。Codeigniter はこのデータを Cookie に保存できます (合計が 4kb 未満の場合)。それ以外の場合は、より大きなデータの塊をデータベースに保存できます (これを行う方法についてはドキュメントを参照してください)。

参照: http://codeigniter.com/user_guide/libraries/sessions.html

サブセクション: データベースへのセッション データの保存

セッションの演習を次に示します。

$this->session->set_userdata('mydata', $mydata);
....
$mydata = $this->session->userdata('mydata');
于 2009-12-18T22:45:03.770 に答える
0

これがCodeIgniters Hook メカニズムから解決できない場合は、コントローラーのコンストラクター メソッドをオーバーライドして、独自のメソッドを呼び出すことができます。彼らのSVNリポジトリから判断すると、おそらく次のようなことをするでしょう

class YourController extends Controller
{
    function YourController()
    {
        parent::Controller();
        $this->_preDispatch();
    }

    function _preDispatch()
    {
         // any code you want to run before the controller action is called
    }

preDispatch への呼び出しは、親への呼び出しの前でなければならない可能性があります。試してみて、それが機能するかどうかを確認してください。彼らがまだPHP4構文を使用しているとは知りませんでした。うーん:(

于 2009-12-18T13:19:35.993 に答える
-2

あなたの URL 構造と、codeignitor が MVC パターンを使用しているという事実に基づいて、mod_rewrite を使用して URL パスを index.php のクエリ文字列にフォーマットしていると思います。この場合、「id」の値は、スクリプトの実行中の任意の時点で $_REQUEST['id'] で利用できるはずです...

于 2009-12-18T15:22:26.777 に答える