繁体   English   中英

如何在视图中检索数据,独立于Codeigniter中的控制器

[英]how to retrieve data in view Independent of controller in codeigniter

我的网站上有一个侧边栏,可从db接收一些信息,并且由于控制器和侧边栏相同,因此无法使用控制器来检索数据。 如何在查看页面中打印此数据。 当我在视图中用PhP代码编写代码时,显示了无法定义变量的错误。

我该怎么办?

当发现在许多不同的控制器中需要相同的代码时,“自定义库”(类)是最佳选择。 这里可以找到用于创建自己的库的文档。

控制器应该使用模型从数据库中获取数据。 定制库也可以像控制器一样使用模型。 这是一个称为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()放在单独的行上可以更轻松地阅读。

  1. 您可以为常见任务创建一个助手。 然后为侧边栏创建一个函数,并在需要时调用它。 检查此链接以获取有关创建助手的更多详细信息

  2. 您也可以为其创建一个库。 虽然这不是一个很好的选择。

  • 创建侧边栏(视图页面),并直接在该侧边栏中(视图页面)调用模型。

  • 其次,直接在所有其他视图页面内调用边栏(视图页面)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM