php-绕过CodeIgniter中的控制器的方法?

我一直在使用PHP的CodeIgniter框架并很喜欢它,但是我注意到它似乎需要每个视图都有一个控制器.我想知道是否有一种方法可以从视图本身调用特定模型,而不是通过控制器进行路由.我了解在大多数情况下,最好是使用控制器,特别是在需要以某种方式修改模型数据的情况下,但是在某些情况下,我只需要对视图进行严格的数据提取(即加载通过ajax),并为此设置控制器似乎是多余的.

有什么想法吗?提前致谢!

解决方法:

从根本上来说,您误解了MVC,至少在CI中已实现.

您站点上的所有URL(至少使用CI框架的URL)都映射到控制器内的功能(方法).

http://myCIsite.com/controller/method[/var1][/var2]

通过常规HTTP还是通过AJAX访问URL都没有关系.这始终是一对一的映射.因此,您应该将控制器/方法组合视为“网页”.不要将视图视为网页.

模型和视图从属于控制器.控制器将特定的职责委派给他们-模型的数据库交互以及页面输出到视图.

由于模型和视图仅用于执行委派的职责,因此在任何给定的控制器/方法中都不需要使用它们.例如,帮助页面通常不需要与数据库进行交互,因此服务于给定帮助页面的控制器/方法组合没有使用任何模型.同样,表单处理程序在处理完成后经常会重定向到另一个页面.这样,就没有与表单处理程序相对应的视图(但是(可能)在重定向到页面的控制器/方法中有一个调用的视图).

此外,模型和视图不一定与单个控制器/方法一一对应.任何给定的模型都可以在多个控制器中加载和使用.类似地,控制器可以具有所有方法都使用的单个整体视图,或者可以为每个方法分配自己的视图. (或者,正如我刚才说的,给定的控制器/方法根本无法使用任何视图.)

最后,CI不会强制执行严格的MVC分隔.您可以与数据库进行交互,并从控制器内部全部回显HTML,CI不会抱怨.但是,遵循这种责任的分离和委派是因为逻辑上将责任分开使得代码更易于阅读,并帮助您在编码中遵循DRY原则.

基本的理解是“网页”对应于控制器/方法.视图和模型在使用时处理控制器/方法的委托职责.

上一篇:PHP-Codeigniter和Paypal:如何运作


下一篇:PHP-Codeigniter活动记录和MySQL