1

ログイン関数を作成して、すべてのコントローラーで関数を呼び出さなくても、ページが読み込まれるたびに自動的に実行されるようにする方法について説明しているサイトをいくつか見てきました。私が見たいくつかへのリンク。

私はこれを達成する方法について話しているこのウェブサイトを見つけました:

philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY

CI_Controllerを拡張するMY_Controllerと、Webサイトのメインサイトを制御するMY_Controllerを拡張するFrontend_Controllerを作成しました。また、作成しているCMSを制御するBackend_Controllerもあります。

Backend_Controllerを拡張するログインコントローラーもあります。私が持っている質問は、バックエンド領域全体に対してifステートメントを実行して、セッション変数が設定されているかどうかを確認し、存在する場合は値が数値であるかどうかを確認する場合はどうなるかということです。次に、ログインにリダイレクトするようにし、そうでない場合は、Backend_Controllerも拡張するコントロールパネルコントローラーにリダイレクトします。Backend_Controller内のifステートメントを実行しますか?

これがIIが考えたものです。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Backend_Controller extends MY_Controller
{
    public function __construct()
    {
        parent::__construct(); 

        if (!!isset($this->session->userdata('xtr'))) && (!is_integer($this->session->userdata('user_variable_id'))))
        {
            redirect('login');
        }
    }
}  

これを達成するためのこれは正しい方法であり、そうするための適切な場所ですか?もしそうなら、ユーザーを管理するためのログインコントローラーまたは他のコントローラーに固有のことをしますか?

または、これを使用するためのより良いアイデアはありますか?

4

1 に答える 1

1

この問題は、実際には、codeigniterにとって風変わりでユニークなものではありません。これは、他の何よりも、オブジェクト指向/クラスベースの質問です。意見の問題は、クラスを別のクラスから拡張する方法と、クラスの構成関数に実際に何を入れることができるかを尋ねる方がよいでしょう。しかし、それは言われていることであり、もっとミュートポイントです。たぶん私はただ気の利いたことを意味します。それか

この点で、コンストラクター/デコンストラクターがあるオブジェクト/クラス。通常、変数と関数呼び出しを配置できます。しかし、ifステートメントが機能するかどうかはわかりません。おそらく、同じものを含むクラス内で関数/メソッドを作成し、if-elseそれに応じて入札を行わせると、構成に含めるよりもうまく機能します。

しかし、私はしばらく前に読んだものに基づいて行きます、そしてそれ以来多くが変わりました。

見てみよう

PHPのコンストラクターに何を追加できますか?

http://php.net/manual/en/language.oop5.decon.php

フルクラスを作成してからしばらく経ちましたが、今日では何よりも多くのメソッドを作成しており、PHPv5.3.2から5.3までを知っています。 3古いphpと新しいphpとの互換性のために、ロジック全体の動作にいくつかの変更がありました。ですから、全体として、これは実際に質問に完全に答えるよりも、ガイダンスを提供する手段であると思います。

PHPの可能性のバージョンに依存する可能性が最も高いのは、if-elseである可能性が高いフードに頼ります。コンストラクトでは、実行したいことではなく、コンストラクトから呼び出されるメソッドを作成します。

于 2012-12-10T20:35:06.207 に答える