【问题标题】:how to retrieve data in view Independent of controller in codeigniter如何在视图中检索数据独立于codeigniter中的控制器
【发布时间】:2017-02-26 06:39:56
【问题描述】:

我的站点中有一个侧边栏,它从 db 接收一些信息,但我不能使用控制器来检索数据,因为我有不同的控制器和相同的侧边栏。如何在视图页面中打印此数据。 当我在视图中用 P.h.P 代码编写时,它显示一个无法定义变量的错误。

我该怎么做?

【问题讨论】:

    标签: php codeigniter model-view-controller view


    【解决方案1】:
    1. 您可以为常见任务创建助手。然后为你的侧边栏创建一个函数并在你需要的地方调用它。查看此link 了解有关创建帮助程序的更多详细信息

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

    【讨论】:

      【解决方案2】:
      • 创建侧边栏(查看页面)并直接在该侧边栏(查看页面)内调用模型。

      • 在所有其他视图页面中直接调用侧边栏(视图页面)。

      【讨论】:

        【解决方案3】:

        当您发现在许多不同的控制器中需要相同的代码时,“自定义库”(类)是完美的选择。可在 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,将每个 -&gt;view() 放在单独的行上会更容易阅读。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-04-08
          • 1970-01-01
          • 2018-04-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多