Cakephp3中控制器的可重用代码

Cakephp3中控制器的可重用代码,php,cakephp,cakephp-3.0,Php,Cakephp,Cakephp 3.0,我想以Cakephp的方式在控制器中创建可重用代码。我想在渲染网站之前,总是在几个控制器中替换一个字段。例如,我想替换字段体中的字符串。我可以在show方法中这样做: public function show($id = null) { $site = $this->Sites->findById($id)->first(); $new_value = 'test2'; $site['body'] = str_replace('test', $new_value,

我想以Cakephp的方式在控制器中创建可重用代码。我想在渲染网站之前,总是在几个控制器中替换一个字段。例如,我想替换字段体中的字符串。我可以在show方法中这样做:

public function show($id = null) {
  $site = $this->Sites->findById($id)->first();
  $new_value = 'test2';
  $site['body'] = str_replace('test', $new_value, $site['body']);
}
在cakephp中有没有更好的方法来实现这一点,例如在initalize方法或beforeRender中?我不能在这里使用行为

编辑:
我知道组件,但如何使用它来替换我代码中所有控制器方法的所有$site['body],所以我想自动执行此操作,就像实体的行为一样?

阅读

组件是控制器之间共享的逻辑包。CakePHP附带了一组奇妙的核心组件,您可以使用这些组件来帮助完成各种常见任务。您还可以创建自己的组件。如果发现自己想在控制器之间复制和粘贴东西,则应该考虑创建自己的组件来包含这些功能。创建组件可以保持控制器代码干净,并允许您在不同控制器之间重用代码

请参阅。

您可以使用组件

别忘了将其加载到appController或需要的地方

编辑后:

@Nexeq

也许如果您在appController中设置beforeRender

public function beforeRender()
{
    debug($this->request);
}
在$this->request->data数组中,您有要替换的数据

例如:

data => array(
        'Reunion' => array(
            'begin' => '2017-01-13 20:00:00',
            'end' => '2017-01-13 20:30:00'
        )
如果你在我的例子中找到了得到模型的方法

你可以做这样的把戏


替换->$this->request->data[$model]['body']

我通过burzum帮助找到了解决方案,我可以在src/model/Entity中使用虚拟财产:

protected function _getBody() {
  $new_value = 'test2';
  $test = str_replace('test2', $new_value, $this->_properties['body']);
  return $test;
}

在所有控制器方法中,它将用$new_值替换例如“test2”

我知道组件,但如何使用它来替换所有控制器方法代码中的所有$site['body],因此我希望自动执行此操作,如实体的行为?虚拟属性->和无需在控制器中设置任何内容。你的问题对于你试图解决的任何问题都是完全不明确和不具体的。不知道你的其他价值来自何方。我想我的问题很清楚。虚拟属性工作。在beforeRender中,我的数据为空:[data]=>Array