【问题标题】:In a PHP MVC, what's the correct way of passing controller data to model classes?在 PHP MVC 中,将控制器数据传递给模型类的正确方法是什么?
【发布时间】:2016-03-28 10:53:49
【问题描述】:

在我目前正在开发的 PHP MVC 中,基本控制器会检查用户是否已登录,如果已登录,则更新其属性(参见代码)。

由于这些属性用于模型类的各种方法中,我想将它们从基本控制器传递给(基本)模型。 这样做的正确方法是什么?

class Controller {

     protected $user_logged_in = false;
     protected $logged_in_user_id = null;

     function __construct() {
         if(isset($_SESSION['user_id'])) {
              $this->user_logged_in = true;
              $this->logged_in_user_id = $_SESSION['user_id'];
         }
     }
 }

【问题讨论】:

  • 会话是“模型”,您可以在控制器和模型中获取此模型。
  • @Naumov ...据我了解,在模型方法中访问 $_SESSION 变量并不是一个好习惯...
  • model 文件实际上指向数据库中的对象/记录。您不应该将任何数据从控制器发送到模型。

标签: php model-view-controller


【解决方案1】:

我这样做是这样的:模型的构造函数接受一个身份验证类。这个请求是通过自动装配/自动依赖注入来实现的。我的注入器被编程为在任何需要它的地方传递相同的身份验证类实例,因此没有差异(即身份验证类是“共享的”)。

这样,您实际上并没有将数据从控制器传递到模型层中的类。相反,模型层中的类/服务通过注入依赖项直接访问它需要的类。

技术是从this video那里学来的,值得看完。以上只是我的实现方法中的一个 sn-p,但是有一些教程和库可用于自动装配,它们可能以不同的方式实现。尝试搜索“php自动装配”或“php自动依赖注入”。

另一种方式来做你想做的事就是给你的控制器中使用的服务添加一个参数。您的控制器应该可以访问模型层,因此调用添加参数函数应该没什么大不了的。

【讨论】:

    猜你喜欢
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    相关资源
    最近更新 更多