【问题标题】:Controller class using variable from other class控制器类使用来自其他类的变量
【发布时间】:2013-01-07 16:02:12
【问题描述】:

我试图弄清楚如何处理我有一个 MY_Controller、Backend_Controller 的情况,当然后端扩展了 MY,我还有其他控制器,如 Login 和其他扩展后端的较小控制器。我的问题是,如果您注意到登录控制器需要能够访问后端控制器内部的变量?在这种情况下如何使用该变量?

在后端控制器我有这个:

<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');

class Backend_Controller extends MY_Controller
{
    function __construct ()
    {
        parent::__construct();

        $this->load->library('session');

        $cms_template = $this->config->item('cms_template');

        $this->data['template'] = $cms_template;
    }
}

这是登录控制器:

<?php 

if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Login extends Backend_Controller 
{
    public function __construct()
    {
        parent::__construct();  
    }    

    public function index()
    {   
        $js_page_addons = '<script src="'.base_url().'assets/' .$cms_template. '/js/validation/login_form.js"></script>';

        $page_view = 'login_view';

        $this->data['js_page_addons'] = $js_page_addons;
        $this->data['page_view'] = $page_view;
        $this->load->view('cms/' . $cms_template . '/usermanagement/index_view', $this->data);
    }
}

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    因为 MY_ 前缀默认由 Codeigniter 加载,并且非前缀控制器不需要像这样包含对 backend_controller 类的引用:

    if (!defined('BASEPATH')) exit('不允许直接脚本访问');

    include_once(APPPATH .'controllers/backend_controller.php');

    类登录扩展 Backend_Controller { 公共函数 _construct() { 父级::_construct();
    }

    public function index()
    {   
        $js_page_addons = '<script src="'.base_url().'assets/' .$cms_template. '/js/validation/login_form.js"></script>';
    
        $page_view = 'login_view';
    
        $this->data['js_page_addons'] = $js_page_addons;
        $this->data['page_view'] = $page_view;
        $this->load->view('cms/' . $cms_template . '/usermanagement/index_view', $this->data);
    } }
    

    【讨论】:

      【解决方案2】:

      如果您的意思是您需要从后端控制器访问变量到登录控制器,因为您正在扩展 Login_Controller 中的 Backend_Controller,您可以这样做: 在 Backend_Controller::

      public function __construct() {
         parent::__construct();  
         $this->some_backend_var = "some_value_here";
         //OR
         ci()->some_backend_var = $this->some_backend_var = "some_value_here";
      }
      

      在登录控制器中的一些功能,你可以使用:

      echo $this->some_backend_var; //shows "some_value_here"
      

      你的意思是这样的吗?

      【讨论】:

        【解决方案3】:

        如果您指的是$cms_template,您应该可以通过以下几种方式之一找到它。假设$data 数组和$config 属性都不是private,请尝试任一

        $cms_template = $this->config->item('cms_template');
        

        $cms_template = $this->data['template'];
        

        另外,如果构造函数只代理parent::__construct(),则不需要构造函数

        【讨论】:

        • 最后一行是什么意思?
        • @KevinSmith 你的Login 类有一个冗余的构造函数。删除它会产生相同的结果。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-28
        • 1970-01-01
        • 2016-07-28
        • 2012-02-03
        • 1970-01-01
        相关资源
        最近更新 更多