Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.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 如何避免CodeIgniter中的控制器代码膨胀?_Php_Model View Controller_Codeigniter_Coding Style_Controllers - Fatal编程技术网

Php 如何避免CodeIgniter中的控制器代码膨胀?

Php 如何避免CodeIgniter中的控制器代码膨胀?,php,model-view-controller,codeigniter,coding-style,controllers,Php,Model View Controller,Codeigniter,Coding Style,Controllers,控制器以MVC模式存在,用于处理用户输入和输出。因此,输入验证和响应准备应在控制器中完成 例如,我有一个控制器方法“save”,它: 查找输入数据 对数据运行验证程序 如果输入有效,则加载适当的模型,将其字段设置为输入值,并调用其save()方法 如果输入无效,则准备数据以重新加载编辑表单,并显示表单 所有这些序列产生了相当混乱的线性代码。我想把它分开。是否将验证部分移动到模型中?听起来不对?我是否创建一个特殊的“库”类来处理输入 在Asp.NETMVC中,这会更好,因为他们已经实现了“对象

控制器以MVC模式存在,用于处理用户输入和输出。因此,输入验证和响应准备应在控制器中完成

例如,我有一个控制器方法“save”,它:

  • 查找输入数据
  • 对数据运行验证程序
  • 如果输入有效,则加载适当的模型,将其字段设置为输入值,并调用其
    save()
    方法
  • 如果输入无效,则准备数据以重新加载编辑表单,并显示表单
所有这些序列产生了相当混乱的线性代码。我想把它分开。是否将验证部分移动到模型中?听起来不对?我是否创建一个特殊的“库”类来处理输入


在Asp.NETMVC中,这会更好,因为他们已经实现了“对象绑定器”模式。因此,验证和模型字段绑定消失,控制器变得更轻。CodeIgniter是否也有类似的功能?

控制器进行验证并没有被广泛接受,我在模型中按照“保持模型胖、控制器瘦、视图哑”进行验证


这取决于业务逻辑,什么是有效的电话号码等等,所以只有在模型中使用它才有意义。

我会完全按照您所回避的那样做,并在您的模型中加入尽可能多的逻辑。依我看,控制器确实应该用于启动服务和为视图准备数据


您应该尽可能多地使用可重用的代码,即验证器、过滤器等。

这听起来很有道理。我将不得不接受模型类可能处于“无效”状态的想法-我一直试图仅在知道它是“合法对象”时构造一个。@naivists,控制器可以检查是否有任何输入,如果没有输入,则可以省去加载模型(和初始化数据库)的麻烦。但任何实际的验证实际上都依赖于域/业务逻辑,这就是为什么,对我来说,将其放在模型中是有意义的。不过,这方面还没有达成共识,因此您需要根据自己的情况进行调整。:)尝试将“输入提取”和验证移动到模型类。看起来不错,谢谢!