组件是在控制器CakePHP中破解代码的最佳实践吗

组件是在控制器CakePHP中破解代码的最佳实践吗,cakephp,controller,Cakephp,Controller,我正在使用CakePHP开发一个web应用程序。我的申请流程如下: 一个文件上传到表单视图 控制器接收文件。现在,根据文件的类型,我会进行不同的处理。但最终提取的参数是相同的,并保存到数据库中的同一个表中。在处理每种类型的文件时,我的控制器变得非常冗长。我看到一些帖子,鼓励使用组件,但从文章中可以看出,当您想在不同的控制器之间共享代码时,应该使用组件,我猜这是类的实用类型 我的问题是如何在不同的文件中中断我的控制器代码,以便在控制器中接收到特定类型的文件时,我可以重定向我的流?处理上传是数据

我正在使用CakePHP开发一个web应用程序。我的申请流程如下:

  • 一个文件上传到表单视图

  • 控制器接收文件。现在,根据文件的类型,我会进行不同的处理。但最终提取的参数是相同的,并保存到数据库中的同一个表中。在处理每种类型的文件时,我的控制器变得非常冗长。我看到一些帖子,鼓励使用
    组件
    ,但从文章中可以看出,当您想在不同的控制器之间共享代码时,应该使用组件,我猜这是类的实用类型


我的问题是如何在不同的文件中中断我的
控制器
代码,以便在控制器中接收到特定类型的文件时,我可以重定向我的流?

处理上传是数据处理,应该以此作为模型。我个人不认为所有这些野外的组件解决方案都适合它

如果您将上载处理移动到模型中,您可以使用单个控制器并在模型方法中执行所有检查,然后可以调用关联模型或获取模型实例,该实例将最终处理您希望该模型处理的文件类型


请随意看看我的插件。阅读readme.md,它可能会让您对正确的文件处理有更多的了解。在我看来,文件永远不应该仅仅通过在例如Users.avatar中保存路径而直接附加到记录,而是应该与用户模型关联:用户有一个avatar。处理文件和处理文件要容易得多,而且您可以统一处理所有文件。

处理上传就是数据处理,应该以此作为模型。我个人不认为所有这些野外的组件解决方案都适合它

如果您将上载处理移动到模型中,您可以使用单个控制器并在模型方法中执行所有检查,然后可以调用关联模型或获取模型实例,该实例将最终处理您希望该模型处理的文件类型


请随意看看我的插件。阅读readme.md,它可能会让您对正确的文件处理有更多的了解。在我看来,文件永远不应该仅仅通过在例如Users.avatar中保存路径而直接附加到记录,而是应该与用户模型关联:用户有一个avatar。处理文件和处理文件要容易得多,而且您可以统一处理所有文件。

谢谢。但我的印象是,当需要和数据库交互时,应该从控制器调用模型。所以当我通过
POST
收到一个文件后,我在控制器中提取有用的信息,并通过调用model将记录保存在数据库中。这是错误的。控制器应该像指挥一样工作,而您的模型应该是实际处理数据的音乐家(指挥的指令)。模型不仅仅用于数据库,还用于任何类型的数据处理。好处很明显:例如,您可以通过更改模型的数据源来简单地更改模型的存储后端。模型比控制器代码更容易测试,代码比控制器中的代码更易于重用。例如,你可以从shell中使用它。很抱歉,我是新手。那么,您的意思是我应该通过url:
server:/model/methodname
还是通过
server:/controller/methodname
来显示我的视图?如果您对基础知识有困难,请开始学习博客教程。您不能从URL调用模型,这将破坏MVC的整个理念。请参阅Try IRC freenode#cakephp以获取聊天社区帮助。这里的评论不是讨论的最佳场所。我明白你的意思了。但是,如果我将所有处理移到模型中,那么模型代码不会太长吗?那我怎么破解模型的代码呢?谢谢。但我的印象是,当需要和数据库交互时,应该从控制器调用模型。所以当我通过
POST
收到一个文件后,我在控制器中提取有用的信息,并通过调用model将记录保存在数据库中。这是错误的。控制器应该像指挥一样工作,而您的模型应该是实际处理数据的音乐家(指挥的指令)。模型不仅仅用于数据库,还用于任何类型的数据处理。好处很明显:例如,您可以通过更改模型的数据源来简单地更改模型的存储后端。模型比控制器代码更容易测试,代码比控制器中的代码更易于重用。例如,你可以从shell中使用它。很抱歉,我是新手。那么,您的意思是我应该通过url:
server:/model/methodname
还是通过
server:/controller/methodname
来显示我的视图?如果您对基础知识有困难,请开始学习博客教程。您不能从URL调用模型,这将破坏MVC的整个理念。请参阅Try IRC freenode#cakephp以获取聊天社区帮助。这里的评论不是讨论的最佳场所。我明白你的意思了。但是,如果我将所有处理移到模型中,那么模型代码不会太长吗?那个么我该如何破解模型的代码呢?