0

在我的控制器中,我想设置一些值并让它们在我的应用程序的不同视图中存在(或存在)。

我在某处读到需要使用 beforeFilter 函数,但我不确定这是否正确以及我如何去做。

所以在我的控制器中我想要

public function page1() {
  $this->Model->setId('123');
}

public function page2() {
  $this->Model->getId(); // would able to get the Id that was set from page1 function
  $this->Model->setName('Bob');
}

public function page3() {
  $this->Model->getId(); 
  $this->Model->getName();
}

如果您有任何问题,请告诉我。

4

2 回答 2

1

要在整个视图中拥有这种“持久性”,我想最简单的方法是会话。

请注意,使用您提供的代码(我知道这不是一个工作示例),您希望变量在模型中持久存在,但在同一控制器(或其他控制器)的操作之间不会维护同一模型。

例如,您必须在会话中设置该变量并在要使用它时检索它,或者在数据库中并在模型中创建方法以获取最后插入的 id。

所以你的代码就像

public function page1() {
   $this->Session->write('id', '123');
}

public function page2() {
   $this->Session->read('id');
   $this->Session->write('name', 'Bob');
}

public function page3() {
   $this->Session->read('id');
   $this->Session->read('name');
}
于 2013-04-29T21:36:12.810 回答
0

有一个单一的模型方法,可以在一个数组中返回所有数据,例如

return array('varName' => $value, 'varName2' => $value2);

然后,您可以在过滤器之前从控制器调用此模型方法,然后简单地执行

$this->set(ClassRegistry::init('MyModel')->commonViewVars());

如果您要描述您认为需要做什么,我可以给您一个更好的建议,例如使用 requestAction() ,这可能是另一种选择,具体取决于您要做什么。

根据您要传递给每个页面的数据,您应该真正考虑缓存它。例如,如果它是一个菜单,则“永远”将其缓存,并在菜单更改时更新缓存。

于 2013-04-29T23:05:41.023 回答