在CakePHP3.6中,如何将另一个控制器的函数调用到另一个控制器中?

In CakePHP3.6, how to call function of another controller into other controller?

我正在为我的项目使用 CakePHP3.6。我在选项控制器中创建了以下函数:

public function getValue($id = null){ 
$options=$this->Options->find()->where(['id'=>$id])->first();
return $options->value;  
}

然后我将此函数调用到另一个控制器(任何 xyz 控制器)的函数中,如下所示:

$r = $this->Options->getValue(1);

现在我收到错误 'Unknown method "getValue"'。

我为 CakePHP3.2 遵循的相同程序,效果很好。所以请帮助我,如何将另一个控制器的函数调用到 CakePHP3.6 的另一个控制器的函数中?

你应该永远不要从一个控制器调用另一个控制器的函数,我非常怀疑这是否像 3.2 中所示那样工作。这个函数看起来很像它应该在 OptionsTable 中,而不是 OptionsController 中。您需要做的唯一更改是在函数体内,它将只是 $this->find(),而不是 $this->Options->find().

class FirstController extends AppController
{
public function getValue($id = null){ 
  $options=$this->Options->find()->where(['id'=>$id])->first();
  return $options->value;  
}
}

class SecondController extends AppController
{
public function anotherAction($id = null){
 $anotherController =  new \App\Controller\FirstController();  
 $r = $anotherController->getValue($id) ;   
}
}