在App中使用partials(如何正确设置控制器?)

时间:2013-11-07 11:49:07

标签: model-view-controller controllers partials phalcon

我想构建一个应用程序(电子商店),其中每个块(部分)可以单独呈现(使用pAJAX服务这些块),但同时,我想获得整个页面,如果它是直接要求。让我通过例子解释一下。

电子商店目录页面包含以下块(部分):

  1. 产品
  2. 消息
  3. 页脚
  4. 电子商店索引页面包含以下块(部分):

    1. 制品
    2. 消息
    3. 页脚
    4. 电子商店产品页面包含以下块(部分):

      1. 产品
      2. 消息
      3. 页脚
      4. 因此,如果我请求“/ catalog / robots”,我会得到一个包含所有渲染块的页面,但是当我请求“/ block / cart”时,我只想获得部分购物车内容。

        如何正确设计控制器(和视图),所以我不必在每个ProductsController,ProductController,IndexController(例如)中反复获取购物车产品?我可以这样做:

        class IndexController extends \Phalcon\Mvc\Controller {
        
          use CartController;
          use NewController;
          ....
        
        }
        

        如果我计划工作,我如何设计所有工作?

1 个答案:

答案 0 :(得分:0)

我可能会有一堆非常薄的控制器扩展了更实质的基本控制器

class ShopBaseController extends \Phalcon\Mvc\Controller {

    public function getNews( $limit=10 )
    {
        $news = \App\News::find(
            'query stuff here'
           ,'limit'=>$limit
        );

        $this->view->setVar('news', $news); 
    }

    public function getProducts( ... ){ ... }

    public function getCart( ... ){ ... }

    public function getSpecials( ... ){ ... }

}

class IndexController extends ShopBaseController {

    public function indexAction(){
        $this->getNews(10);
        $this->getProducts(array(
            // product params
        ));
        $this->getCart();
        $this->getSpecials();
    }

}

class CatalogController extends ShopBaseController {

    public function indexAction(){
        $this->getNews(5);
        $this->getProducts(array(
            // product params
        ));
        $this->getCart();
        $this->getSpecials();
    }
}

然后是观点

<div>
    <?=$this->partial('blocks/news', array( 'news'=>$news ))?>
</div>