0

我有一个控制器,它有很多功能,我注意到我的 get_participants 函数没有运行,当我加载我的欢迎视图时,因为当我尝试使用时,<?php echo $product ?>我得到未定义的变量异常。

我不希望在我的索引函数中包含加载欢迎视图的所有内容,而是创建一个视图的许多函数。调用这个控制器的正确方法是什么,以便它运行类中的每个函数,或者有什么更好的方法我应该这样做?

class Welcome extends CI_Controller
{
    function __construct()
    {
        parent::__construct();

        $this->load->helper('url');
        $this->load->library('tank_auth_groups','','tank_auth');
        $this->load->model('Participant_model');
    }

    function index()
    {
        if (!$this->tank_auth->is_logged_in()) {
            redirect('/auth/login/');
        } else {
            $data['user_id']    = $this->tank_auth->get_user_id();
            $data['username']   = $this->tank_auth->get_username();
                $this->load->view('welcome', $data);
        }

    }


   public function get_participants()
    {

        $data['product'] = $this->Participant_model->get_all_records();

        $this->load->view('welcome', $data);
    }

}

看法

Hi, <strong>
<?php echo $username; ?></strong>! You are logged in now. 
<?php echo anchor('/auth/logout/', 'Logout'); ?>
<?php echo $product; ?>
4

1 回答 1

3

为什么不直接在 index 中调用 products 模型?

function index()
{
    if (!$this->tank_auth->is_logged_in()) {
        redirect('/auth/login/');
    } else {
        $data['user_id']    = $this->tank_auth->get_user_id();
        $data['username']   = $this->tank_auth->get_username();
        $data['product'] = $this->Participant_model->get_all_records();

        $this->load->view('welcome', $data);
    }
}

没有明显的理由将其分成自己的方法。

您还可以设置类变量并让方法相应地影响它们。这在很大程度上取决于您的需求,但适当的示例可能并不完全适用。

class Welcome extends CI_Controller
{
    private $data = array(
        'user_id' => null,
        'username' => null,
        'product' => null
    );

    function __construct()
    {
    ...

然后让个别方法影响公共 $data 数组中的某些元素

   public function get_participants()
    {
        $this->data['product'] = $this->Participant_model->get_all_records();
    }

并让您的索引方法加载类数组而不是专门填充它......

function __construct()
{
    parent::__construct();

    $this->load->helper('url');
    $this->load->library('tank_auth_groups','','tank_auth');

    if (!$this->tank_auth->is_logged_in()) {
        redirect('/auth/login/');
    } else {
        $this->data['user_id']    = $this->tank_auth->get_user_id();
        $this->data['username']   = $this->tank_auth->get_username();
    }

    $this->load->model('Participant_model');
}

function index()
{
    $this->get_participants();
    $this->load->view('welcome', $this->data);
}

请注意,这只是您如何安排课程以满足您的需求的一个示例。不一定是好习惯或任何东西的例子。最终,您应该以适合您需要并且任何正常人都可以合理阅读的逻辑方式进行编程。只是我的观点。

I should say I think it is a bad idea to try to set up a class that forcibly runs every method inside it to create one view. A linear execution is essentially the same thing as piling everything into the index method. Maybe I missed the point of your statement though.

于 2013-03-30T02:48:15.083 回答