Php 您应该在MVC框架的控制器或模型中处理会话数据吗?

Php 您应该在MVC框架的控制器或模型中处理会话数据吗?,php,model-view-controller,codeigniter,model,controller,Php,Model View Controller,Codeigniter,Model,Controller,我正在使用MVC框架(特别是PHP框架)。我试图尽可能地遵循“最佳实践”,但我对MVC没有太多经验。从控制器内的会话中检索数据对我来说是一种不好的做法吗?如果某个特定会话值是“foo”或“bar”,我应该“询问”模型吗?还是应该直接在控制器内部这样做?我想我应该在模型内部这样做,因为会话数据在技术上是数据,但我只是想确定一下。要明确的是,我根本不在数据库中存储会话数据,所以我没有运行查询 模型通常处理持久化到某种长期存储的所有域对象。它们可能有也可能没有与特定应用程序使用它们有关的瞬态值 控制器

我正在使用MVC框架(特别是PHP框架)。我试图尽可能地遵循“最佳实践”,但我对MVC没有太多经验。从控制器内的会话中检索数据对我来说是一种不好的做法吗?如果某个特定会话值是“foo”或“bar”,我应该“询问”模型吗?还是应该直接在控制器内部这样做?我想我应该在模型内部这样做,因为会话数据在技术上是数据,但我只是想确定一下。要明确的是,我根本不在数据库中存储会话数据,所以我没有运行查询

模型通常处理持久化到某种长期存储的所有域对象。它们可能有也可能没有与特定应用程序使用它们有关的瞬态值

控制器应查询所需的任何数据,以便正确路由和显示信息。它可能有助于创建一个直接在域对象(您的模型)上运行的“服务”层,并为控制器提供一个API供其使用。控制器中不包括的主要内容是业务逻辑

例如,对于控制器来说,抓取引用页面并处理与用户流相关的数据是合理的。但是,除了验证之外,它可能不应该(比如)检查帐户之间转移的金额——它应该将其传递给一个服务对象,该对象实例化并使用正确的域对象

有关控制器逻辑的问题:

  • 这个逻辑是否有助于找出我需要的模型对象?如果没有,它就不应该在这里
  • 此逻辑是否有助于确定哪些视图对象将用于构造对用户的响应?如果没有,它就不应该在这里

Nathaniel,所以如果我从数据库中选择要显示在页面上的内容,那么应该在控制器中完成吗?不相关,但有帮助;持久化到任何类型存储(包括数据库)的任何对象都是域对象。如果您将某些内容存储到数据库中,那么模型/服务层应该获取这些信息。控制器只是将该信息传递给正确的视图。+1表示“某种长期存储”。这就是我想说的。会话是CodeIgniter(CI_会话)中的一个库,您可以直接从类实例访问会话数据。仅供参考,CI_会话数据有4k大小限制,因为它使用Cookie,而不是PHP的本机会话。@ChrisC默认情况下是。但您可以将其更改为使用本机会话。有很多实现都在处理这个问题。只需将其中一个MY_会话放入应用程序/库中即可