0

多くの関数を持つコントローラーがあります。使用しようとすると未定義の変数例外が発生するため、 welcome ビューをロードすると、get_participants 関数が実行されないことに気付きます。<?php echo $product ?>

ウェルカム ビューをロードするインデックス関数にすべてを含めるのではなく、1 つのビューを作成する多くの関数を含めたいと考えています。このコントローラーを呼び出して、クラス内のすべての関数を実行する適切な方法は何ですか?または、これを行うべきより良い方法はありますか?

class Welcome extends CI_Controller
{
    function __construct()
    {
        parent::__construct();

        $this->load->helper('url');
        $this->load->library('tank_auth_groups','','tank_auth');
        $this->load->model('Participant_model');
    }

    function index()
    {
        if (!$this->tank_auth->is_logged_in()) {
            redirect('/auth/login/');
        } else {
            $data['user_id']    = $this->tank_auth->get_user_id();
            $data['username']   = $this->tank_auth->get_username();
                $this->load->view('welcome', $data);
        }

    }


   public function get_participants()
    {

        $data['product'] = $this->Participant_model->get_all_records();

        $this->load->view('welcome', $data);
    }

}

意見

Hi, <strong>
<?php echo $username; ?></strong>! You are logged in now. 
<?php echo anchor('/auth/logout/', 'Logout'); ?>
<?php echo $product; ?>
4

1 に答える 1

3

製品モデルをインデックスで呼び出さないのはなぜですか?

function index()
{
    if (!$this->tank_auth->is_logged_in()) {
        redirect('/auth/login/');
    } else {
        $data['user_id']    = $this->tank_auth->get_user_id();
        $data['username']   = $this->tank_auth->get_username();
        $data['product'] = $this->Participant_model->get_all_records();

        $this->load->view('welcome', $data);
    }
}

それを独自の方法に分離する明確な理由はありません。

クラス変数を設定して、それに応じてメソッドに影響を与えることもできます。ただし、それはニーズに大きく依存するため、適切な例が正確に適用できない場合があります。

class Welcome extends CI_Controller
{
    private $data = array(
        'user_id' => null,
        'username' => null,
        'product' => null
    );

    function __construct()
    {
    ...

次に、個々のメソッドが public $data 配列の特定の要素に影響を与えるようにします

   public function get_participants()
    {
        $this->data['product'] = $this->Participant_model->get_all_records();
    }

インデックスメソッドにクラス配列を具体的に入力する代わりにロードさせます...

function __construct()
{
    parent::__construct();

    $this->load->helper('url');
    $this->load->library('tank_auth_groups','','tank_auth');

    if (!$this->tank_auth->is_logged_in()) {
        redirect('/auth/login/');
    } else {
        $this->data['user_id']    = $this->tank_auth->get_user_id();
        $this->data['username']   = $this->tank_auth->get_username();
    }

    $this->load->model('Participant_model');
}

function index()
{
    $this->get_participants();
    $this->load->view('welcome', $this->data);
}

これは、ニーズに合わせてクラスをアレンジする方法の一例にすぎません。必ずしも良い習慣などの例ではありません。最終的には、自分のニーズに合った論理的な方法でプログラミングし、通常の人間が合理的に読めるようにする必要があります。私の意見です。

クラス内のすべてのメソッドを強制的に実行して 1 つのビューを作成するクラスを設定しようとするのは悪い考えだと思います。線形実行は、すべてを index メソッドに積み上げることと本質的に同じことです。多分私はあなたの声明の要点を逃したかもしれません。

于 2013-03-30T02:48:15.083 に答える