Model view controller MVC-清理数据,在哪里?

Model view controller MVC-清理数据,在哪里?,model-view-controller,model,controller,Model View Controller,Model,Controller,我正在使用CakePHP,但这是一个关于MVC模式的问题。我的表格中有标记的输入文本,用逗号分隔。为了添加标签,我创建了一个标签模型方法,基本上检查标签是否存在,然后在标签计数器中添加新标签或只是一个新单元。标签模型有以下字段:id、name、slug、count。 在控制器中,我分解tags字段,每次传递一个标记。 问题是:我在哪里清理数据?在控制器中还是在模型方法中?我认为它应该在控制器中,因为那是我爆炸的地方,但在可重用性方面,我认为我应该清理模型中的数据。 你觉得怎么样?你可能想从你的控

我正在使用CakePHP,但这是一个关于MVC模式的问题。我的表格中有标记的输入文本,用逗号分隔。为了添加标签,我创建了一个标签模型方法,基本上检查标签是否存在,然后在标签计数器中添加新标签或只是一个新单元。标签模型有以下字段:id、name、slug、count。 在控制器中,我分解tags字段,每次传递一个标记。 问题是:我在哪里清理数据?在控制器中还是在模型方法中?我认为它应该在控制器中,因为那是我爆炸的地方,但在可重用性方面,我认为我应该清理模型中的数据。
你觉得怎么样?

你可能想从你的控制器中对其进行消毒,但是,从并不意味着进入。有一个单独的类来清理数据-这样你就可以在任何需要的地方调用该类


基本上,您希望创建一个契约,使您的模型能够始终接收良好的数据,这意味着您必须事先对其进行清理。

您希望从控制器中对其进行清理,但是,从中并不意味着在中。有一个单独的类来清理数据-这样你就可以在任何需要的地方调用该类


您基本上希望创建一个契约,使您的模型能够始终收到良好的数据,这意味着您必须事先对其进行清理。

您应该清理客户端视图和服务器端控制器上的数据。

您应该清理客户端视图和服务器端控制器上的数据。

严格来说,清理数据应该在控制器中进行,但清理通常也指清理用户输入以避免许多问题,例如SQL注入。由于您在不同的上下文中使用“清理”一词,因此我们必须更加注意该上下文是什么

您没有清理用户输入,这意味着它实际上不需要在控制器中发生。您正在更改此操作的结果,具体取决于您要保存的项目是否已存在于数据库中。因此,在我看来,它应该发生在模型中,或者,正如Munkiphyd所指定的,在某种助手类中有一个方法,您可以从任何地方调用它——但我说在模型中调用它


编辑:通常,在MVC中,模型知道是应该将新行保存到数据库中,还是根据您的模型实例是否具有有效ID来更新现有行。如果它具有ID,则模型应该保存到该ID索引的行中。如果没有,则模型创建一个新行。我的理解是,您所要做的就是知道在何处让它决定是创建新的还是更新现有的,这在模型中发生。

我想说,严格来说,清理您的数据应该在控制器中发生,但清理通常也指清理用户输入以避免许多问题,比如SQL注入。由于您在不同的上下文中使用“清理”一词,因此我们必须更加注意该上下文是什么

您没有清理用户输入,这意味着它实际上不需要在控制器中发生。您正在更改此操作的结果,具体取决于您要保存的项目是否已存在于数据库中。因此,在我看来,它应该发生在模型中,或者,正如Munkiphyd所指定的,在某种助手类中有一个方法,您可以从任何地方调用它——但我说在模型中调用它


编辑:通常,在MVC中,模型知道是应该将新行保存到数据库中,还是根据您的模型实例是否具有有效ID来更新现有行。如果它具有ID,则模型应该保存到该ID索引的行中。如果没有,则模型创建一个新行。我的理解是,您所要做的就是知道在何处让它决定是创建新的还是更新现有的,这在模型中发生。

我不同意清理数据以存储在控制器中,我认为最好的方法是在模型中执行,因为控制器不应该知道数据是如何存储的,但是清理需要这些知识,例如存储mysql的mysql\u real\u escape\u字符串与存储PostgresQL的pg\u escape\u字符串,或者检查存储在XML文件中的有效XML,或者其他不同存储机制的内容


为了防止像跨站点脚本编写这样的事情,请不要在存储之前对数据进行清理,因为您以后可能会合法地使用某些html标记,最好在view或controller中进行清理。

我不同意在controller中对存储数据进行清理,我认为最好在model中进行清理,作为控制器,不应该知道数据是如何存储的,但是清理需要这些知识,例如mysql\u real\u escape\u字符串用于存储mysql,而pg\u escape\u字符串用于PostgresQL,或者可能检查有效的XML(如果存储在XML文件中),或者其他用于不同存储的内容 愤怒机制


为了防止像跨站点脚本编写这样的事情,在存储之前不要清理数据,因为以后可能会合法地使用某些html标记,最好在view或controller中这样做。

CakePHP有一个清理类,我正在使用它。我在想我应该在哪里使用它。当然,我会在之前进行清理,事实上,在我的自定义方法中,我在清理之后调用save/update方法。我在想我应该在哪里使用它。当然,我会在之前进行清理,事实上,在我的自定义方法中,我会在清理发生后调用save/update方法。所以你基本上是说,这一切都取决于我清理的内容,对吗?在我的例子中,我的标签是严格的字母数字,每次我必须创建slug时,我都会使用slug检查标签是否存在。因此,我认为我将在控制器中清除html中的数据,并在模型中检查SQL注入和slug的创建。这样可以吗?从HTML中清除数据通常应该只针对输出进行,也许你希望有这样的标记,你基本上是建议这一切都取决于我正在清理的内容,对吗?在我的例子中,我的标签是严格的字母数字,每次我必须创建slug时,我都会使用slug检查标签是否存在。因此,我认为我将在控制器中清除html中的数据,并在模型中检查SQL注入和slug的创建。这样可以吗?从HTML中清除数据通常只应用于输出,也许您希望有像Yeah这样的标记,我更新的不同之处在于,我必须在计数器中添加一个单元,这不是cakephp模型中的默认行为,但这不是一个真正的问题。你不能扩展模型并告诉框架使用你的子类吗?是的,我的更新的不同之处在于,我必须在计数器中添加一个单元,这不是cakephp模型中的默认行为,但这不是一个真正的问题。您不能扩展模型并告诉框架使用您的子类吗?