2

我正在创建自己的 CMS。我在 MVC 框架的帮助下做到了这一点。我认为 CMS 应该使用一组标准元素构建。例如,所有表单元素所在的按钮、文本字段和 div 容器等。

例如,当我想创建一个基本页面时,我想在视图中执行以下操作:

$cmsForm->beginTab('tab name');
$cmsForm->textfield('name', 'default value');
$cmsForm->textfield('email', '');
$cmsForm->textarea('info', '');
$cmsForm->submit('Save');
$cmsForm->endTab();

问题是,我不确定将这些方法放在哪里。我显然不能将这些方法放在控制器中。但也许模型是个好地方?另一方面,模型层用于从持久层存储/检索数据,而不是用于返回 HTML...

对于这种事情,在 MVC 架构中什么是好地方?

4

3 回答 3

1

这种类型的代码属于您的视图层。请记住,没有规定说您的视图层只能是模板。

于 2012-05-20T16:25:24.023 回答
1

没有规定你必须做什么。

如果我是你,我会编写自己的类并在框架中实现它,因为以后如果你需要它会更容易重构。此外,您不会意外更改框架的逻辑(一切都可能发生)。

于 2012-05-20T16:28:18.483 回答
1

另一方面,模型层用于从持久层存储/检索数据,而不是用于返回 HTML

实际上模型层是用于业务逻辑的。


这显然是与表示逻辑相关的代码,因此应该在视图中。我认为,与其编写这种奇怪的生成器脚本,不如编写一个模板,然后由哪个视图处理。

此外,您的 API 很糟糕。您甚至没有听说过SOLID 原则

如果有这样的东西会更好(但仍然被误导,恕我直言):

$foo = new HTML\Form();

$name = new HTML\Input('name');
$name->setValue('default value');
$name->setRules(array('required'));
$foo->addField( $name );

$email = new HTML\Input('email');
$email->setRules(array('required', 'email'));
$foo->addField( $email )

// other fields added

$template = new Template('/path/to/template.something');
$template->bind('form', $foo);
$output = $template->render();
于 2012-05-20T19:59:03.187 回答