【问题标题】:Codeigniter helper with model data带有模型数据的 Codeigniter 助手
【发布时间】:2012-06-11 09:37:53
【问题描述】:

我希望创建一个名为“导航”的助手,而不是将重复的数据粘贴到我的控制器中,这将用于每个控制器并加载到导航子视图中。

目前,在每个控制器中,我都添加了以下代码。

// Get Subcategories
$subcat1 = $this->Categories_model->get_artstyles();
$subcat2 = $this->Categories_model->get_artsubjects();
$subcat3 = $this->Categories_model->get_media();
$subcat4 = $this->Categories_model->get_photography();

$this->view_data['sub_cat1'] = $subcat1->result();
$this->view_data['sub_cat2'] = $subcat2->result();
$this->view_data['sub_cat3'] = $subcat3->result();
$this->view_data['sub_cat4'] = $subcat4->result();

所以我想做的就是将其修剪下来并将该数据作为助手加载。所以最终我在每个控制器中所做的就是加载帮助器。

如果您认为这是错误的做法,请提出建议,因为我对 CI 及其方式仍然有些不确定。

这 4 个子目录变量都想成为全局变量。

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    如果此数据与您的所有控制器相关,您应该像这样扩展 CI_Controller:

    class MY_Controller extends CI_Controller {
         protected $view_data;
    
         public function __construct() {
             parent::__construct();         
                     $this->load->helper('nav');
                     $this->view_data = load_navigation();
         }
    }
    

    将此文件放在core 目录中并像这样扩展所有控制器:

    class CONTROLLER_NAME extends MY_Controller 
    

    阅读更多here

    在辅助函数中:

    function load_navigation() {
             $CI =& get_instance();
             $CI->load->model('Categories_model');
             $result['sub_cat1'] = $CI->Categories_model->get_artstyles()->result();
             $result['sub_cat2'] = $CI->Categories_model->get_artsubjects()->result();
             $result['sub_cat3'] = $CI->Categories_model->get_media()->result();
             $result['sub_cat4'] = $CI->Categories_model->get_photography()->result(); 
             return $result;
    

    }

    编辑:

    为了将变量加载到视图中:

    $data['view_data'] = $this->view_data;
    $this->load->view('MY_VIEW', $data);
    

    在视图中,您可以像这样访问它:$view_data

    【讨论】:

    • 辅助函数是扩展控制器的替代方法吗?我问的原因是 CI 的版本是 1.7.9,它没有核心文件夹
    • 您可以在 1.7 中扩展控制器。它只是一个不同的目录。在这里阅读:codeigniter.com/wiki/…
    • 谢谢。现在只是在我的视图中得到未定义的变量。我在库/MY_Controller 下创建了 MY_Controller,在 helpers/nav_helper 下创建了助手“nav_helper”
    • 那个 view_data 似乎没有被传递给视图。我创建了一个 pastebin。依次为 MY_Controller、nav_helper 和 Homecontroller..pastebin.com/GCNhbSXq
    • __construct的内容移动到MY_Controller()函数中,并移除与CI 2.0及更高版本相关的parent::__construct();
    【解决方案2】:

    您可以使用 html 模板系统,并将其作为标准的默认 html 模板。

    我使用Williams Concepts的模板库

    【讨论】:

      猜你喜欢
      • 2011-06-30
      • 2016-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      • 2011-04-20
      • 1970-01-01
      相关资源
      最近更新 更多