【问题标题】:CakePHP - Access session data in Model::afterSave()CakePHP - 在 Model::afterSave() 中访问会话数据
【发布时间】:2011-10-11 16:11:38
【问题描述】:

我有MyModel,无论何时创建或更新它,我都想在my_model_changes (MyModelChange) 中插入一行,这是所有更改的日志。

问题是我需要MyModelChange 才能保存当前用户的ID,以便将谁授权更改为MyModel

我知道模型不应该能够访问 MVC 中的 Auth 会话。但是,必须记录对MyModel 的每次更改,所以我不想让人们在每次修改模型时记住在控制器中执行此操作,因为有存在被遗忘或未正确完成的风险,在这种情况下,日志将不完整。相反,我想使用 MyModel::afterSave() 以便它是自动化的,并且总是会正确发生。

那么我如何让MyModel 找到 Auth 用户的 ID?

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    也许我的解决方案不是最优雅的方式,但我在我的应用程序中使用它并且它有效。在保存到控制器之前,我使用 user_id 扩展 $this->data,如下所示:

    $this->data['MyModel']['user_id']=$this->Auth->user('id');
    

    所以我可以在我的模型 afterSave 方法中使用它。我希望它可以帮助。

    【讨论】:

      【解决方案2】:

      难道不能在 app_controller.php 的 beforeFilter 中做你想做的事吗?这样你就不必在其他控制器中设置任何东西,除了 parent::beforeFilter() 如果你覆盖它。

      但如果确实需要,您可以将其放入您的模型中以访问会话数据:

      App::import('Component', 'SessionComponent');
      $Session = new SessionComponent();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多