我有大约9行代码在我的许多控制器中都是相同的。他们进入索引并用于检查用户是否已登录,授予了什么级别的访问权限,并获取一些会话变量。包含不完整的代码片段的最好方法是什么?CodeIgniter - 包含部分代码?
片段并不是所有的控制器,只是构建应用程序的管理部分。
如果我可以使用一行代码来包含片段,但我是CodeIgniter的新手,并且我不想偏离最佳实践,那将是非常好的。如果你可以包括一个简单的例子,可以帮助我想象这一点。谢谢!
我有大约9行代码在我的许多控制器中都是相同的。他们进入索引并用于检查用户是否已登录,授予了什么级别的访问权限,并获取一些会话变量。包含不完整的代码片段的最好方法是什么?CodeIgniter - 包含部分代码?
片段并不是所有的控制器,只是构建应用程序的管理部分。
如果我可以使用一行代码来包含片段,但我是CodeIgniter的新手,并且我不想偏离最佳实践,那将是非常好的。如果你可以包括一个简单的例子,可以帮助我想象这一点。谢谢!
你想创建的扩展基地CI控制器并在那里进行检查。扩展核心在这里的文档中:http://ellislab.com/codeigniter/user_guide/general/creating_libraries.html向下滚动到Extending Native Libraries部分。
在新的控制器,你可以做这样的事情:
<?PHP
class MY_Controller extends CI_Controller
{
function __construct()
{
parent::__construct(); //Gets all the CI_Controller functions and makes them available to this controller.
if($this->session->userdata('is_logged_in')
{
$this->load->model('categories');
$this->categories=$this->categories->getAllCategories();
}
}
}
然后在你的其他控制器使用MY_Controller而非是CI_Controller这样的:
<?php
class Pages extends MY_Controller {
很明显,你将拥有自己的检查和变量加载,但这应该给你的一般想法。在上面的示例中,我现在可以使用$ this-> categories来检索已使用MY_Controller加载的应用程序中的任何位置的我的类别。
我使用的是 '主' 模板文件(视图/的template.php):
// views/template.php
<?php $this->load->view('includes/header'); ?>
<?php $this->load->view('includes/' . $main_content); ?>
<?php $this->load->view('includes/sidebar'); ?>
<?php $this->load->view('includes/footer'); ?>
所以视图目录结构是这样的:
--views
--includes
- header.php
- footer.php
- template.php
正如你所看到的在view/includes/
文件夹中,我使用了一些可重复使用的片段,例如'header.php','footer.php'...
因此,在控制器内部,我正在加载这个主模板文件:
class MyController extends CI_Controller {
public function index()
{
//...
$this->load->view('template',$data);
}
}
因此它加载'template.php'。 并且可以使用里面的header.php的$data
,footer.php太..
但是,只要你想,你可以改变这一点,它只是一个“基本”的想法..
谢谢。我想我明白这是如何工作的,我会试试看。 –