Model view controller 在应用程序中使用partials(如何正确设置控制器?)

Model view controller 在应用程序中使用partials(如何正确设置控制器?),model-view-controller,controllers,partials,phalcon,Model View Controller,Controllers,Partials,Phalcon,我想构建一个应用程序(e-shop),其中每个块(部分)都可以单独呈现(使用pAJAX为这些块提供服务),但同时,如果直接请求,我希望获得整个页面。让我举例说明 电子商店目录页由以下部分组成: 产品 新闻 页脚 推车 电子商店索引页由以下部分组成: 文章 新闻 页脚 推车 电子商店产品页面由以下部分组成: 产品 新闻 页脚 推车 因此,如果我请求“/catalog/robots”,我会得到一个包含所有渲染块的页面,但当我请求“/block/cart”时,我只希望得到cart部分上的内容 如何正确

我想构建一个应用程序(e-shop),其中每个块(部分)都可以单独呈现(使用pAJAX为这些块提供服务),但同时,如果直接请求,我希望获得整个页面。让我举例说明

电子商店目录页由以下部分组成:

  • 产品
  • 新闻
  • 页脚
  • 推车
  • 电子商店索引页由以下部分组成:

  • 文章
  • 新闻
  • 页脚
  • 推车
  • 电子商店产品页面由以下部分组成:

  • 产品
  • 新闻
  • 页脚
  • 推车
  • 因此,如果我请求“/catalog/robots”,我会得到一个包含所有渲染块的页面,但当我请求“/block/cart”时,我只希望得到cart部分上的内容

    如何正确地设计控制器(和视图),这样我就不必在每个ProductsController、ProductController、IndexController中一次又一次地获取购物车产品(例如)?我可以做一些类似于:

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

    我怎样才能设计出一切都能按我的计划工作呢?

    我可能会有一堆非常精简的控制器,扩展一个更强大的基本控制器

    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>
    
    
    
    etc

    我不想成为“脾气暴躁的抢分者”,但看起来你是新来的,所以如果某件事对你有帮助,通常会接受答案和/或加上分数,谢谢:)