我将以下代码放在公共function index()
下的每个控制器中。截至目前,我有3个控制器,它将增加,直到我的网站完成。我需要在所有页面(即视图)中使用以下代码。
$type = $this->input->post('type');
$checkin = $this->input->post('sd');
$checkout = $this->input->post('ed');
我的问题是我在哪里可以将上面的代码放在一个位置,以便它可以在所有页面(即视图)上使用,并避免将其放在每个控制器中。
答案 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