0

我有大约 9 行代码,在我的许多控制器中都是相同的。它们进入索引并用于检查用户是否已登录、授予的访问级别以及获取一些会话变量。包含本身不是完整功能的代码片段的最佳方式是什么?

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

如果我可以使用一行代码来包含代码段,那就太好了,但我是 CodeIgniter 的新手,我不想偏离最佳实践。如果你能包括一个简短的例子来帮助我想象这一点。谢谢!

4

2 回答 2

1

您想创建基本 CI 控制器的扩展并在那里进行检查。扩展核心位于此处的文档中:http: //ellislab.com/codeigniter/user_guide/general/creating_libraries.html向下滚动到扩展本机库部分。

在您的新控制器中,您可以执行以下操作:

<?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 的任何位置检索我的类别。

于 2012-11-17T14:59:31.807 回答
0

我正在使用“主”模板文件(views/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'。并且也可以使用$data 里面的header.php,footer.php..

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

于 2012-11-17T13:51:27.447 回答