Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MVC体系结构中的数据和表单验证_Php_Model View Controller_Codeigniter_Architecture - Fatal编程技术网

Php MVC体系结构中的数据和表单验证

Php MVC体系结构中的数据和表单验证,php,model-view-controller,codeigniter,architecture,Php,Model View Controller,Codeigniter,Architecture,我使用CodeIgniter开发了我的大多数web应用程序,并且在将数据发送到要使用的模型(例如,将数据插入数据库)之前,始终采用使用内置表单验证类在控制器内验证表单数据的方法 然而,我不断听到“瘦控制器,胖模型”这句话——我想知道这些验证检查是否应该放在模型中 当我想到使用这种方法时,我想到了三件事 如何向用户显示不同的错误消息,而不从这些模型函数返回看似丑陋的数组或对象?e、 g注册帐户时发送重复的电子邮件。负责在模型中添加用户的方法是否必须返回一个数组或对象来指示插入是否成功,以及是否有任

我使用CodeIgniter开发了我的大多数web应用程序,并且在将数据发送到要使用的模型(例如,将数据插入数据库)之前,始终采用使用内置表单验证类在控制器内验证表单数据的方法

然而,我不断听到“瘦控制器,胖模型”这句话——我想知道这些验证检查是否应该放在模型中

当我想到使用这种方法时,我想到了三件事

  • 如何向用户显示不同的错误消息,而不从这些模型函数返回看似丑陋的数组或对象?e、 g注册帐户时发送重复的电子邮件。负责在模型中添加用户的方法是否必须返回一个数组或对象来指示插入是否成功,以及是否有任何错误消息

  • 通过在模型中进行验证检查,检查从控制器提供给方法的变量(而不是POST数据),我将失去Form validation类的使用,我发现该类在我的项目中非常有用。您是否建议我编写一个类或库,它可以像CI库一样用于模拟表单验证类,但用于提供的变量,而不限于POST数据

  • 从这一点出发……由于POST数据在传递到模型之前必须验证其存在性(
    isset($\u POST['myvar'))
    ),所以验证的其余部分是否也应该放在控制器中


  • 任何建议、建议、意见都将不胜感激

    您最初的问题来自这样一个事实:CodeIgniter对MVC的解释非常令人震惊。这个框架假装视图只是一个模板,而模型只是一个ORM()。这是完全错误的,并迫使bot业务和表示逻辑在控制器内部

    但让我们把视野放在一边

    MVC中的模型不是类或对象模型是一个层,它包含所有业务逻辑。它实际上由许多类的实例组成。两个最流行的组是DomainObjects[][](这是人们通常称之为“模型”)和负责信息存储和检索的对象(通常是)。模型层还包含独立组件(包括您自己的组件和第三方组件)和更高级别的抽象-服务

    作为
    Validation
    类,您所拥有的可能被认为是一个独立的组件,它可以被域对象用来执行验证,也可以期望传入一个域对象进行验证。。取决于您的实现

    在您的情况下,我将在服务层处理此问题。它将为
    视图
    类的实例提供有效的域对象,或者提供表示错误的对象

    yu可能感兴趣的一些阅读材料:


    再说一遍。。我到底知道些什么?

    谢谢你的详细回复-我已经阅读了你的一些链接,读得好!那么,您是否建议一种方法是在模型的方法内部进行验证,并返回数据对象或描述/表示错误的对象?e、 g在检索用户记录的方法中,如果提供id,则返回用户的对象,如果不返回包含错误消息和状态代码的对象,等等,您将如何在控制器中处理此问题?@Sam,如果您要使用ActiveRecord对象,则必须将其放在控制器中。您应该创建某种setter,它将验证器传递给对象,然后在同一点上对字段集执行验证。在出现错误时,您可以抛出一个异常,然后在控制器(实际上在CI中,它是“presenter”)级别处理该异常。