【发布时间】:2017-02-26 06:39:56
【问题描述】:
我的站点中有一个侧边栏,它从 db 接收一些信息,但我不能使用控制器来检索数据,因为我有不同的控制器和相同的侧边栏。如何在视图页面中打印此数据。 当我在视图中用 P.h.P 代码编写时,它显示一个无法定义变量的错误。
我该怎么做?
【问题讨论】:
标签: php codeigniter model-view-controller view
我的站点中有一个侧边栏,它从 db 接收一些信息,但我不能使用控制器来检索数据,因为我有不同的控制器和相同的侧边栏。如何在视图页面中打印此数据。 当我在视图中用 P.h.P 代码编写时,它显示一个无法定义变量的错误。
我该怎么做?
【问题讨论】:
标签: php codeigniter model-view-controller view
您可以为常见任务创建助手。然后为你的侧边栏创建一个函数并在你需要的地方调用它。查看此link 了解有关创建帮助程序的更多详细信息
您也可以为它创建一个库。虽然这不是一个很好的选择。
【讨论】:
创建侧边栏(查看页面)并直接在该侧边栏(查看页面)内调用模型。
在所有其他视图页面中直接调用侧边栏(视图页面)。
【讨论】:
当您发现在许多不同的控制器中需要相同的代码时,“自定义库”(类)是完美的选择。可在 HERE 找到创建您自己的库的文档。
控制器应该使用模型从数据库中获取数据。自定义库也可以像控制器一样使用模型。这是一个非常基本的自定义库,名为Sidebar。这取决于不会显示的模型 (sidebar_model)。 Sidebar 库的目的是返回 sidebar_view 文件所需的变量。
文件:application/libraries/Sidebar.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Sidebar
{
protected $CI; // Read the documentation link to see why this is needed.
public function __construct()
{
$this->CI = & get_instance();
$this->CI->load->database(); //only needed if not already done
$this->CI->load->model('sidebar_model');
}
public function get_sidebar_data()
{
return $this->CI->sidebar_model->get_sidebar();
}
}
库方法get_sidebar_data()返回视图的变量。
这是一个使用自定义库的控制器。它将使用自定义库和包含侧边栏 HTML 的视图文件(未显示)。
文件:application/controllers/Main.php
class Main extends CI_Controller
{
function __construct()
{
parent::__construct();
$this->load->library('sidebar'); //can also be autoloaded
}
public function index()
{
$data['sidebar'] = $this->sidebar->get_sidebar();
$this->load
->view('banner')
->view('sidebar_view', $data)
->view('main_view')
->view('footer_view');
}
}
需要显示侧边栏的任何其他控制器都将使用相同的模式。
此控制器加载四个不同的视图文件,并使用“方法链接”,这是受鼓励的。方法链的执行速度稍微快一点。但使用它的最佳理由是什么?少打字。
方法转换也可以是这样的类型:
$this->load->view('banner')->view('sidebar_view', $data)->view('main_view')->view('footer_view');
但是,IMO,将每个 ->view() 放在单独的行上会更容易阅读。
【讨论】: