Php MVC设计-在CodeIgniter MVC web应用程序项目中,我可以/应该/必须拥有多少控制器?

Php MVC设计-在CodeIgniter MVC web应用程序项目中,我可以/应该/必须拥有多少控制器?,php,model-view-controller,codeigniter,Php,Model View Controller,Codeigniter,我正在使用CodeIgniter MVC框架用PHP构建一个相对简单的web应用程序。我以前开发过PHP应用程序,但从来没有严格遵守过。我已经习惯了MVC框架,但是有两个问题一直把我带回到绘图板上,这会减慢开发速度 对于一个web应用程序可以拥有多少控制器,是否有最佳实践?我的应用程序有一个(相当大的)控制器,其中包括业务逻辑、表单提交逻辑等。虽然这样做有效,但我正在讨论是否有必要使用单独的控制器,例如一个用于表单处理和提交,另一个用于用户管理(会话、登录、注册)等。然后,我也不想过度设计这件事

我正在使用CodeIgniter MVC框架用PHP构建一个相对简单的web应用程序。我以前开发过PHP应用程序,但从来没有严格遵守过。我已经习惯了MVC框架,但是有两个问题一直把我带回到绘图板上,这会减慢开发速度

  • 对于一个web应用程序可以拥有多少控制器,是否有最佳实践?我的应用程序有一个(相当大的)控制器,其中包括业务逻辑、表单提交逻辑等。虽然这样做有效,但我正在讨论是否有必要使用单独的控制器,例如一个用于表单处理和提交,另一个用于用户管理(会话、登录、注册)等。然后,我也不想过度设计这件事我挂断的部分是:控制器有一个“默认”索引函数,在父URL处加载。所有业务逻辑都从这里开始(例如,表单提交、处理数据等)。我默认只在开发继续时在同一控制器中创建新函数。这是可行的,但我的部分目标是学习最佳实践,有些事情告诉我我可能走错了方向

  • 模型是否应仅用于数据库读/写功能,或者我是否可以将“助手”功能也放在其中,例如生成\u随机\u编号、验证\u登录\u凭据、登录\u会话、注销\u会话等

  • (这是我的主观意见——它对我很好)

    模型应该是整个应用程序的核心。模型应该处理所有业务逻辑和数据库管理。同时,控制器应该尽可能薄,只提供模型和视图之间的接口

    例如,在登录屏幕中,控制器应向用户提供登录视图。当用户输入信息时,控制器应处理输入验证并将输入转发给模型,模型应以“成功”或“失败”响应。因此,控制器应该将用户重定向到仪表板,或者分别将其发送回登录屏幕并显示错误消息

    总而言之:模型应该是胖的,控制器应该是瘦的。控制器

    这完全取决于应用程序的性质,但一般来说,答案是您不应该拥有“一个相当大的控制器”

    将应用程序拆分为更小的部分越多,维护起来就越容易

    型号

    直接从Codeigniter文档

    模型是设计用于处理数据库中信息的PHP类。 答案是肯定的,您应该只使用模型进行数据交互

    我觉得很有趣你居然自己回答了

    “…或者我可以将'helper'函数也放在那里,…”

    碰巧Codeigniter有一个处理这类功能的工具


    重要的是要记住:这个答案非常主观,脂肪控制器与脂肪模型是一个年龄段的争论,我们不要把它当作一方或另一方是一个确定的标准。Codeigniter实际上鼓励fat控制器,不同的框架围绕不同的目标构建/ideas@jondavidjohn:对于一般MVC来说是这样,但是对于PHP开发来说,胖模型瘦控制器方法显然是最好的方法。这只是说明您缺乏使用codeigniter的经验。本文中给出的表单验证示例甚至不可能使用codeigniter,因为模型类没有扩展singleton CI实例,因此它无法执行验证,至少利用codeigniter的验证库是如此。因此,虽然这在以这种组织为基础构建的框架中可能是个好主意,但codeigniter却不是。我想那是我的错:P@Codemonkey我完全同意你的意见。即使使用CI,fat控制器可能出现的问题的例子是无法重用代码,因为您无法从任何其他模型/控制器引用控制器操作/属性。这是我见过的最干净、最深思熟虑且格式最规范的1信誉问题+1给你,好先生!这不应该出现在“程序员交换”上吗?这是个好问题。我明白为什么MVC会强制执行严格的编码。您所建议的是一个“登录控制器”,它调用“登录助手”中的函数,使用“登录模型”验证用户的凭据。嗯,哎哟!不,通常对于登录函数,您使用(或编写)一个库,该库将具有与数据库交互的相应模型。如果您阅读了helper的描述,它将更适合于像generate_random_number示例这样的任务。我通常有一个“auth”控制器,用于处理登录/注销/忘记密码等。。。面向公众的身份验证功能,一旦登录成功,它会将用户发送到受保护区域。我有一篇关于这个主题的相当详细的文章,你会“或多或少”为每一个模型配备一个控制器吗?