2012-11-17 52 views
0

我有大约9行代码在我的许多控制器中都是相同的。他们进入索引并用于检查用户是否已登录,授予了什么级别的访问权限,并获取一些会话变量。包含不完整的代码片段的最好方法是什么?CodeIgniter - 包含部分代码?

片段并不是所有的控制器,只是构建应用程序的管理部分。

如果我可以使用一行代码来包含片段,但我是CodeIgniter的新手,并且我不想偏离最佳实践,那将是非常好的。如果你可以包括一个简单的例子,可以帮助我想象这一点。谢谢!

回答

1

你想创建的扩展基地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加载的应用程序中的任何位置的我的类别。

+0

谢谢。我想我明白这是如何工作的,我会试试看。 –

0

我使用的是 '主' 模板文件(视图/的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太..

但是,只要你想,你可以改变这一点,它只是一个“基本”的想法..

相关问题