3

在阅读完 Zend Framework2 教程后,我想知道这一点,但它可能通常适用于 MVC 逻辑......

在本教程中,示例将引导您创建一个添加视图 ( module/Album/view/album/album/add.phtml),然后让您创建一个编辑模板 ( module/Album/view/album/album/edit.phtml),其中的大部分代码都是重复的。编辑脚本基本上有一些额外的逻辑来检查提供的 id,但会为用户提供相同的表单。

现在,在我没有完全使用 MVC 约定的类似情况下,我将有一个脚本来处理添加和编辑选项;如果提供了 id,该逻辑将假定一个“编辑”操作,并尝试检索该 id 的数据库记录以填充表单字段,如果提供了无效的 id,则返回错误。

如果跨应用程序的所有数据库交互都遵循这种方法,那么 MVC 的教科书方法似乎并不能很好地封装 DRY 原则。

我仍在尝试围绕一些 MVC 概念进行思考,但是除了命名约定之外,编辑操作和添加操作不能(或不应该)使用相同的视图模板是否有某些原因?

我看到路由设置为期望模板名称,如教程中所示,但也许我可以调用视图模板来呈现通用表单process.phtml并将其包含在add.phtmlandedit.phtml中。这是一种明智的方法吗?是否有一些理由我应该避免将其作为解决方案?

4

4 回答 4

2

到目前为止,您的add/edit观点之间的差异很小,因此您很想拥有相同的观点。

但是,更大的问题是,差异会持续多久。一些添加/修改功能,一些调整,然后这些差异不会那么小。

IMO,这些是 2 个独立的功能,因此从更好的可读性和维护的角度来看,应该将它们保存在单独的关注点(视图)中。

于 2013-03-28T07:07:04.210 回答
1

如果差异很小,您不需要单独的视图进行编辑和添加。

  1. 对记录 ID 使用隐藏字段并在编辑的情况下设置其值,在添加的情况下将其值设置为空白
  2. 在编辑的情况下获取记录的详细信息,并在编辑的情况下使用获取的记录数据填充输入字段。

在 Zend 中,您可以为两个操作设置相同的视图,例如:

$view = new ViewModel(array('variable'=>$value));
    $view->setTemplate('module/controler/action.phtml'); // path to phtml file under view folder
    return $view;
于 2013-03-28T06:53:39.277 回答
0

如果您不想这样做,则无需使用编辑模板。对于添加/编辑,我们可以使用相同的模板来避免代码重复。如果您想对添加和编辑使用相同的模板,您可以通过呈现指定的模板来实现。

例子:

$this->_helper->viewRenderer('add');
$this->view->mode           =   'edit';

这里 add.phtml 在编辑动作中渲染,mode 指定操作是编辑模式,并根据添加/编辑模式在模板中进行必要的更改。仅此而已

于 2013-03-28T06:52:17.203 回答
0

当我第一次编写相册教程时,为了帮助用户理解 MVC 以及它在 Zend Framework 中的工作原理,用它们自己的视图显示这两个单独的操作很有帮助。

在我自己的应用程序中,我有一个处理 CRUD 类型的添加和编辑的操作和视图,因为正如其他人所指出的,差异是微不足道的。有时添加可能与更新有很大不同。在那些情况下,我分开。

于 2013-03-28T07:38:08.790 回答