1

我想问的第一件事是控制器是如何工作的?假设我有一个控制器:

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

class Home extends CI_Controller {

    public static $groupId;

    public function __construct() {

    }

    public function index() {
        $this->load->model('product_model');

        $data['new_products'] = $this->product_model->get_new_products();
        $data['featured_products'] = $this->product_model->get_featured_products();
        $data['sale_products'] = $this->product_model->get_sale_products();

        $data['template'] = 'index';
        $data['title'] = 'Home';

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

    public function group($groupId) {
        $this->load->model('group_model');
        $this->load->model('product_model');

        $groupId = array_pop(explode('-', $groupId));
        self::$groupId = $groupId;

        $data['groupName'] = $this->group_model->get_group_name($groupId);
        $data['allGroupWithQuantity'] = $this->group_model->get_group_with_quantity();
        $data['products'] = $this->product_model->get_products_by_group($groupId);

        $data['template'] = 'group';
        $data['title'] = $data['groupName']->groupName;

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

    public function test() {
        echo seft:$groupId;
    }

}

/* End of file home.php */
/* Location: ./application/modules/front/controllers/home.php */

当我访问http://localhost:8080/ci/然后http://localhost:8080/ci/television键入http://localhost:8080/ci/test/时,我得到白屏。如果在第一次调用控制器(使用控制器中的方法),并且在第二次,我认为控制器不需要重新加载,所以从组方法中,我为 $groupId 设置值,在测试方法中我可以很容易但我不能。也许当我调用测试方法时,控制器会重新加载。

我想问的第二件事,如何通过其他方法传递 $groupId ?记住!$groupId 不存储在控制器中,我从 url 获取它。

4

1 回答 1

0

你需要像这样调用你的控制器:

http://localhost:8080/ci/home/group/12

其中 12 是您的 groupid,home 是您的控制器的名称。使用会话将您的 $groupId 存储在 group 函数中:

$this->CI->session->set_userdata('groupId', $groupId);

要在测试中加载您的 $groupId,请使用以下代码行:

$groupId = $this->CI->session->userdata('groupId');

另一个解决方案是(根据要求)虽然不是最佳实践,但创建一个名为 group 的静态类:

<?php 
class Group
{
public static $groupId = 12;


}?>

然后您的家庭控制器将如下所示:

include_once 'group.php';
class Home extends CI_Controller {



public function __construct() {

}
public function index() {
    $this->load->model('product_model');

    $data['new_products'] = $this->product_model->get_new_products();
    $data['featured_products'] = $this->product_model->get_featured_products();
    $data['sale_products'] = $this->product_model->get_sale_products();

    $data['template'] = 'index';
    $data['title'] = 'Home';

    $this->load->view('master', $data);
}
public function group($groupId) {
    $this->load->model('group_model');
    $this->load->model('product_model');

    $groupId = array_pop(explode('-', $groupId));
    Group::$groupId = $groupId;

    $data['groupName'] = $this->group_model->get_group_name($groupId);
    $data['allGroupWithQuantity'] = $this->group_model->get_group_with_quantity();
    $data['products'] = $this->product_model->get_products_by_group($groupId);

    $data['template'] = 'group';
    $data['title'] = $data['groupName']->groupName;

    $this->load->view('master', $data);
}
public function test() {

    echo Group::$groupId;
}

}
?>

有关控制器的更多信息,请查看此站点:

http://ellislab.com/codeigniter/user-guide/general/controllers.html

于 2013-06-22T16:56:17.580 回答