php - 在 Codeigniter 中重用表单和 Controller

标签 php oop model-view-controller codeigniter

我正在学习 OO 和 MVC 范式(使用 Codeigniter 和 PHP)。我不断发现这样的警告:如果您发现自己将相同的代码粘贴到多个文件中,那么您没有正确使用 OO/MVC。所以,这里有一个问题要问更有经验的程序员。

  1. 我有一个创建用户表单,我使用了两个非常相似的版本:

    • 版本 1(位于 /volunteer/register)由匿名用户创建。该表单位于 volunteers Controller 中,需要由管理员验证。

    • 版本 2(位于 /admin/create_volunteer)由登录的管理员创建。表单和验证几乎相同,但使用不同的参数提交。

  2. 另一个类似的例子:

    我想构建共享一个模板的不同用户仪表板,但将由不同的用户角色使用,并根据角色具有不同的功能和信息。在我看来,我的选择是:

    1. 创建一个仪表板 Controller ,其中包含三个定义加载到仪表板模板中的数据的函数。
    2. 将仪表板功能添加到每个角色的 Controller (志愿者、管理员等)。
    3. 为每个案例(志愿者、管理员等)创建一个 Controller

如果这看起来很幼稚,我深表歉意,但本质上我是在寻找经验法则来确定如何在 MVC 中设计架构。

我的问题:

  • 在第一个示例中,我对 Controller (VolunteerAdmin)的合理选择是否不太理想?在这种情况下,代码复制是一种可接受的做法吗?
  • 有人可以推荐架构工具来为 MVC 建立逻辑一致性和良好的工作流程吗?

最佳答案

特别是因为这两种形式不同(不同的规则,不同的界面),如果您需要的话,拥有两个单独的 View 文件绝对没有错。在两个不同 Controller 或方法中加载相同的 View 文件是完全可以接受的,确实是适当的。如果只需要进行一些调整,请尝试通过向 View 文件传递不同的数据来重用 View 文件。

如果您只想在不同的实例中加载表单 View 文件,那会为您节省一些代码重复。只需设置不同的规则,如果需要,将不同的数据传递给 View 。这类似于使用相同的表单以两种不同的方法创建和编辑某些内容。如果输出将完全不同,只需编写单独的 View 文件。如果它是相同的输出但具有不同的数据 - 一定要重用它。

不要沉迷于尝试不重复 View 片段代码 - 如果您正在编写更多代码以通过针对不同实例修改 View 文件来强制重用 View 文件,这有点违背了目的。尝试将其作为一种通用做法,使您的代码尽可能可重用。

因此,在没有看到您的实际代码的情况下,我会说不用担心。根据我的经验,前端和后端的 View 文件几乎总是唯一的(完全不同的 UI)。一般来说,如果您发现自己在大量重复相同的非常相似的代码,那么是时候为它编写一个函数、类或模板了。

关于php - 在 Codeigniter 中重用表单和 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6272404/

相关文章:

php - 有效的SQL注入(inject)防护功能

python - 类型错误 : 'Logger' object is not callable

php - 如果内容中存在 iframe,如何将 iframe/video 替换为另一个 div?

php - 记录每个请求 Symfony

c# - 如何更好地在框架中组织类/包,以便我的应用程序的客户端可以轻松地扩展它们?

python - 为什么我允许 pickle 是 Theano 函数的实例方法,而不是普通的实例方法?

javascript - Angular 中的 app.js 到底是什么?

java - 将文件从jsp发送到action

c# - MongoDB 嵌入式文档和 C#/POCO

php - Jquery ui sortable 不创建数组