1

基本上我有一个用于插入产品的 html 表单。字段名称以及 $_POST 变量在我的 Product 类中初始化。构造函数正在“监听”提交按钮。当用户提交表单时,对象的状态变为“就绪”,这意味着它的属性已初始化并准备好插入数据库。

然后我需要根据插入的状态(成功或失败)返回一条消息,如果成功,我将打印类似“产品插入成功”之类的内容,如果失败:“检测到空字段”。

我的问题是是否允许我将这种逻辑放在视图中?像这样:

<?php $myproduct = new Product(); ?>

<form>
<!-- Fields -->
</form>

<?php
if ($myproduct->ready()) :
    if ($myproduct->insert()) : ?>
        <p>Product inserted successfully</p>
<?php
    else : ?>
        <p>Null fields detected</p>
<?php
    endif;
endif; ?>

我真的想不出更简单的方法,因为我确实需要根据 insert() 返回状态来显示消息。

那么在 MVC 模式中是否允许在视图中混合这种逻辑?我没有公开任何类型的业务逻辑,只是检查对象的状态。

4

2 回答 2

2

不。领域业务逻辑在视图中没有位置(也没有在整个表示层中)。这就是 MVC 有模型层的原因。

提交表单时,操作顺序应如下:

  1. $_POST控制器接收带有数据的请求

  2. 控制器将信息发送到模型层

    • 如果数据有效,模型层保存信息
    • 如果数据无效,模型层设置并获取错误状态并保存(通常在会话中)

  3. 控制器通知当前视图已POST发送

  4. 当请求视图生成响应时(最好不是由控制器),它会发送一个LocationHTTP 标头(以防止重复发布)

  5. GET控制器收到新请求(这次只有参数)

  6. 如果需要,控制器会调整模型层和当前视图的状态

  7. 视图查询模型层是否包含错误状态

    • 如果存在错误状态,则从模型层查看错误代码的请求列表,并根据该信息选择使用哪些模板来组成带有“错误”消息的表单
    • 如果模型层没有错误状态,视图使用模板创建“成功”消息

Model2 MVC模式中表单提交的操作顺序。

根据您是否在与表单本身相同的视图中显示错误消息和/或成功消息,视图实例可能会在STEP 4中检查模型层的错误状态。然后视图可以决定Location发送哪个标头。

PS 与模型层的交互很可能通过服务发生。

于 2012-09-11T21:05:53.857 回答
0

如果我是你,我不会在视图中这样做。在逻辑中执行此操作并设置一个布尔值。该值可以在对象本身上,或者只是传递到视图中。

$isInsertedSuccessfully = $myproduct->insert();

或者,在 Product 的内部工作中,添加一个方法来测试它是否已被插入。例如:

$myproduct->insert();
if ($myproduct->exists())
{
    //true - must have been inserted
}

或者

$myproduct->insert();
if ($myproduct->isSaved())
{
    //true - must have been inserted
}

类似的东西?

于 2012-09-11T20:51:48.700 回答