在CakePHP 1.3中进行模型保存/验证之前注入会话数据的正确方法?

时间:2011-01-06 21:32:20

标签: php session cakephp cakephp-1.3

使用CakePHP 1.3.6

我通过唯一值作为URL参数使用无登录身份验证,因此当“邀请”用户访问提供的链接时,我知道他们是谁,并在会话中设置一些用户信息。

在此页面上是一个表单,包含父模型和相关子模型(hasMany,belongsTo,所有这些)。

每个子模型都有一个'agent_id'字段(FK到Agent模型,在访问页面时加载),需要使用先前在Session中加载的ID填充。

我是否必须为每个子模型表单元素组旁边的“agent_id”创建隐藏输入字段,还是有更简单的方法?

也许我可以从会话中获取或者从模型/行为beforeValidate()或某些内容中获取某些内容?这将是理想的,但我不确定如何。

谢谢!

1 个答案:

答案 0 :(得分:2)

从Model调用会话值不是一个好习惯(在MVC模式中)。该值应由操作提供。

创建隐藏输入并不是一个好主意,因为用户可以修改它。

所以你的代码应该像。

if (!empty($this->data)) {
    $this->Model->create();
    $this->data['Model']['agent_id'] = $this->Auth->user('id');
    if ($this->Model->save($this->data)) { 
         // success
    }
}

修改

是的,您可以从模型中读取会话,但建议使用。因为它实际上打破了MVC架构。如果您不在乎,可以使用

// in your Model.php
App::import('Model', 'CakeSession');
$session = new CakeSession();

<强>参考

  1. Using Session Vars in a MVC Domain Model library
  2. http://groups.google.com/group/cake-php/browse_thread/thread/163bd9b60aa8757b/80163f0de8c54ad1?lnk=raot&pli=1
  3. http://cakephp.1045679.n5.nabble.com/Checking-user-session-in-model-td1294422.html
  4. read more