我有一个用PHP编写的原型网站。最近我重写了代码,将逻辑与布局和数据库操作分开。所以现在我有类似MVC代码设计的东西。
现在困扰我的是,在MVC中我将拥有许多文件,并且当与其他文件(模型+视图+控制器)结合时,每个文件都会显示。所以我发现创建类似我的MVC部件的小部件会很有用。
例如,当我拥有MVC产品视图时,我创建的PHP文件以这种方式组合MVC部件文件以显示基于GET值的产品,我将传递给这个新的PHP文件。
我将以这种方式实现的是,任何小部件,网站的子部分都可以单独查看,并与其他部分分开使用。所以它会像小部件或类似Firefox浏览器设计。
因此,我可以单独测试网站的每个部分,而不是仅将这些部分组合到当前的实际网站页面设计中。因此,用户测试也会更容易,并且演示文件文件非常简短易懂。
我想知道你怎么看待它。我不想陷入设计中的任何漏洞,我认为这是将来维护网站代码变得容易的重要时刻。
我说错了吗?
答案 0 :(得分:1)
MVC我会有很多文件,当与其他文件(模型+视图+控制器)结合使用时,每个文件都会显示一些文件
这听起来好像没有让MVC模型正确。只有视图具有内容或“显示某些内容”。
基于此,您可以创建仅创建内容小部件的小部件的操作,然后可以将其组合到您的布局中。
我建议您阅读Zend_Layout Quick Start。
答案 1 :(得分:1)
您的问题的答案是查看构图。
我建议您将整个屏幕分成更小的部分:顶部栏,二级导航栏,产品列表,预览区域等。这些可以由控制器中的单独视图,视图助手或其他方法提供。然后,控制器操作将使用简单的HTML布局将组合成单个屏幕。
EG。对于静态的顶栏,这可能是专门的视图。对于动态的产品列表,可以是提供复杂视图的控制器方法getProductsList($categoryId)
。产品预览可以通过视图助手提供。请参阅以下示例:
// inside class ProductsController
public function index($categoryId, $productId = null) {
// specialised view
$topBar = new TopBarView();
$topBar->selected = 'products';
// helper method
$list = $this->getProductsList($categoryId);
// helper object
$previewHelper = new PreviewHelper($productId);
$preview = $previewHelper->getView();
// view composition
$view = new View('path/to/template.tpl');
$view->add($topBar);
$view->add($list);
$view->add($preview);
return $view;
}
这只是一个说明组合如何运作的例子。
拥有传递窗口小部件(即产品列表)的方法的隐藏好处是可以重用它来支持Ajax。更改类别需要使用新类别ID调用getProductsList
方法。