将此代码放在codeigniter中的位置

时间:2012-08-17 05:45:28

标签: codeigniter

我将以下代码放在公共function index()下的每个控制器中。截至目前,我有3个控制器,它将增加,直到我的网站完成。我需要在所有页面(即视图)中使用以下代码。

$type = $this->input->post('type');
$checkin = $this->input->post('sd');
$checkout = $this->input->post('ed');

我的问题是我在哪里可以将上面的代码放在一个位置,以便它可以在所有页面(即视图)上使用,并避免将其放在每个控制器中。

3 个答案:

答案 0 :(得分:0)

您可以创建自己的控制器(例如MY_cotroller)来扩展CI_controller,将共享代码放在那里,然后您的三个控制器应该扩展MY_controller。 然后,您可以在任何需要的地方调用它(如果您需要它,甚至可以将它放到构造函数中)。

这是我承诺的样本(假设你有默认的codeigniter设置)

core 文件夹中创建名为MY_Controller.php的文件

class MY_Controller extends CI_Controller{

   protected $type;
   protected $checkin;
   protected $checkout;

   protected $bar;

     public function __construct()
    {
        parent::__construct();
        $this->i_am_called_all_the_time();
    }

    private function i_am_called_all_the_time() {
       $this->type = $this->input->post('type');
       $this->checkin = $this->input->post('sd');
       $this->checkout = $this->input->post('ed');
    }

    protected function only_for_some_controllers() {
       $this->bar = $this->input->post('bar');
    }

    protected function i_am_shared_function_between_controllers() {
       echo "Dont worry, be happy!";
    }
}

然后在控制器文件夹中创建控制器

class HelloWorld extends MY_Controller {

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

    public function testMyStuff() {
       // you can access parent's stuff (but only the one that was set), for example:
       echo $this->type;

       //echo $this->bar; // this will be empty, because we didn't set $this->bar
    }

    public function testSharedFunction() {
       echo "some complex stuff";
       $this->i_am_shared_function_between_controllers();
       echo "some complex stuff";
    }
}

然后例如,另一个控制器:

class HappyGuy extends MY_Controller {

    public function __construct() {
       parent::__construct();
       $this->only_for_some_controllers(); // reads bar for every action
    }

    public function testMyStuff() {
       // you can access parent's stuff here, for example:
       echo $this->checkin;
       echo $this->checkout;

       echo $this->bar; // bar is also available here
    }

    public function anotherComplexFunction() {
       echo "what is bar ?".$this->bar; // and here
       echo "also shared stuff works here";
       $this->i_am_shared_function_between_controllers();
    }
}

这些只是一些例子,当然你不会回应这样的东西,而是将它传递给视图等,但我希望它足以说明。也许有人带来了更好的设计,但这就是我用了几次。

答案 1 :(得分:0)

如果您有一个主视图文件,并且您需要在每个页面上使用该代码,那么我建议您放入主视图文件(view / index.php)

我认为,在@KadekM的回答中,你应该每次在每个控制器中调用一个函数,因为你很难过,你希望每个控制器中的每个函数都有这个代码。

答案 2 :(得分:0)

id建议,将其添加到库中,然后自动加载库,以便网站上的每个页面都可以访问它。

用于自动加载reffer:autoload in codeigniter