如何在cakephp中的控制器之间传递变量?

时间:2015-06-27 05:33:45

标签: php cakephp

我正在使用购物车系统插件,我在购物车控制器中设置变量$ cart,现在我必须在碟形控制器中使用相同的变量,这该怎么做? 这是我的代码,我正在使用:

推车控制器:

    class CartsController extends CartAppController {

    public function view($cartId = null) {
            if (!empty($this->request->data)) {
                $this->CartManager->updateItems($this->request->data['CartsItem']);
            }

            if (!empty($cartId)) {
                $cart = $this->Cart->view($cartId, $this->Auth->user('id'));
            } else {
                $cart = $this->CartManager->content();
            }

            $this->request->data = $cart;
            $this->set('cart', $cart);    // This $cart variable is needed to be used in a different controller.
            $this->set('requiresShipping', $this->CartManager->requiresShipping());
        } 

}

菜单控制器

class DishesController extends AppController {
   public function index($id='') {
        **// here i need to print that **$cart** variable**
        $this->layout = false;
        $menu=$this->Menu->find('first', array('conditions' => array("Menu.id"=>$id),'limit'=>1));
        if(empty($id) || empty($menu)){
            $this->redirect(array('controller'=>'menus', 'action'=>'index'));
        }
        $dishes=$this->Dish->find('all', array('conditions' => array("Dish.status"=>"1", "Dish.menu_id"=>$id), 'limit'=>9, 'recursive'=>0, 'order' => array('Dish.id' => 'DESC')));
        $this->set('menu_name',$menu['Menu']['name']);
        $this->set('dishes',$dishes);
        $this->set('page_name','dishes');
    }

}

任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:0)

将您的$cart数据存储在数据库中,然后将记录的主键存储在名为cart_id的会话中: -

$this->Session->write('cart_id', $this->Cart->id);

然后,您可以使用会话数据从其他控制器获取购物车,以便从数据库中检索它: -

$this->loadModel('Cart');
$this->Cart->findById($this->Session->read('cart_id'));

(上面只是一个例子,根据您的特殊需求可以写得更好。)

这往往是我们接近电子商务网站的方式。我个人认为将数据存储在数据库中并将密钥保存在会话中是有意义的。