我有大约 9 行代码,在我的许多控制器中都是相同的。它们进入索引并用于检查用户是否已登录、授予的访问级别以及获取一些会话变量。包含本身不是完整功能的代码片段的最佳方式是什么?
这些片段并不在所有控制器中,只是那些构建应用程序管理部分的控制器。
如果我可以使用一行代码来包含代码段,那就太好了,但我是 CodeIgniter 的新手,我不想偏离最佳实践。如果你能包括一个简短的例子来帮助我想象这一点。谢谢!
我有大约 9 行代码,在我的许多控制器中都是相同的。它们进入索引并用于检查用户是否已登录、授予的访问级别以及获取一些会话变量。包含本身不是完整功能的代码片段的最佳方式是什么?
这些片段并不在所有控制器中,只是那些构建应用程序管理部分的控制器。
如果我可以使用一行代码来包含代码段,那就太好了,但我是 CodeIgniter 的新手,我不想偏离最佳实践。如果你能包括一个简短的例子来帮助我想象这一点。谢谢!
您想创建基本 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 的任何位置检索我的类别。
我正在使用“主”模板文件(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..
但是你可以根据需要改变它,这只是一个“基本”的想法..