使用来自父控制器的对象

时间:2013-08-13 16:31:49

标签: php codeigniter

我有一个简单的控制面板控制器,负责扩展后端控制器以及为登录用户构建控制面板仪表板。根据登录用户的角色,可以加载两个可能的仪表板。如果用户的角色为4,则加载管理仪表板(如果是其他任何内容),则会加载常规用户仪表板。如果您在下面注意到,它会从名为role_id的$user_data对象请求一个属性。此对象在后端控制器中设置。我这样做是因为这个对象用于我的大多数控制器。

当我加载控制面板控制器时,我收到一个未定义的变量$user_data以及尝试获取非对象的属性。我可以不在后端控制器内部设置变量,并在控制面板中使用它。正如我所做的那样。

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

class Control_panel extends Backend_Controller
{

    /**
     * Control_panel::__construct()
     * 
     * Load the parent construct and any additional models, helper, libraries available. 
     * 
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Control_panel::index()
     * 
     * Loads the dashboard that pertains to user's role
     * @return void
     */
    public function index()
    {
        $this->template
            ->title('Control Panel');

        if ($user_data->role_id == 4)
        {
            $this->template
                ->build('admin_dashboard_view');
        }
        else
        {
            $this->template
                ->build('user_dashboard_view');
        }

    }
}

后端控制器

$user_data = $this->user->get_by('user_id', $this->session->userdata('user_id'));
$character_data = $this->character->get_many_by('owned_by', $this->session->userdata
        ('user_id'));
$user_data->characters = $character_data;

$this->template
        ->set_theme('smashing')
        ->set_layout('control_panel_view')
        ->set_partial('header', 'partials/header')
        ->set_partial('sidebar','partials/sidebar')
        ->set_partial('footer', 'partials/footer')
        ->set('user_data', $user_data);

1 个答案:

答案 0 :(得分:1)

如果我不得不猜测我将假设$user_data不是类级别变量,并且它包含在function(){}本身中。如果是这种情况,那么在该函数完成之后,垃圾收集的概念会杀死该变量,因为它仅涉及与interpater有关的函数。

您需要在后端控制器中执行类似

的操作
class BackendController extends Whatever {
   private $_user_data = null;

   public function __construct()
   {
        parent::__construct();
        // Your own constructor code
   }

   public function myBackend()
   {
      $this->_user_data = $this->user->get_by('user_id', $this->session->userdata('user_id'));
      $character_data = $this->character->get_many_by('owned_by', $this->session->userdata
        ('user_id'));
      $user_data->characters = $character_data;

      $this->template
        ->set_theme('smashing')
        ->set_layout('control_panel_view')
        ->set_partial('header', 'partials/header')
        ->set_partial('sidebar','partials/sidebar')
        ->set_partial('footer', 'partials/footer')
        ->set('user_data', $user_data);
   }

}

然后在你的前端控制器

/**
     * Control_panel::__construct()
     * 
     * Load the parent construct and any additional models, helper, libraries available. 
     * 
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Control_panel::index()
     * 
     * Loads the dashboard that pertains to user's role
     * @return void
     */
    public function index()
    {
        $user_data = $this->_user_data;
        $this->template
            ->title('Control Panel');

        if ($user_data->role_id == 4)
        {
            $this->template
                ->build('admin_dashboard_view');
        }
        else
        {
            $this->template
                ->build('user_dashboard_view');
        }

    }
}