【问题标题】:Standard form elements, where to place the code in MVC architecture标准表单元素,代码在 MVC 架构中的放置位置
【发布时间】:2012-05-20 16:20:36
【问题描述】:

我正在创建自己的 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 架构中什么地方适合这种事情?

【问题讨论】:

  • 创建您自己的 html 辅助类或使用您正在使用的框架中包含的内容

标签: php model-view-controller


【解决方案1】:

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

【讨论】:

  • 那么您是否建议我应该在我的视图层中创建一个(助手)类,它具有我在开篇文章中描述的方法?然后是我的控制器工作将该助手类的实例传递给我的视图吗?有什么想法吗?
  • 是的,差不多。这也是从模板中抽象出逻辑的常用方法。
【解决方案2】:

没有规定你必须做什么。

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

【讨论】:

    【解决方案3】:

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

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


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

    另外,你的 API 很糟糕。你甚至没有听说过SOLID principles

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

    $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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多