我在cakephp 2.x中开发了一个网站 我想在我的控制器中调用另一个控制器的函数,如下所示:
class ProductsController extends AppController {
public $name = 'Products';
public $scaffold;
public $uses = array('Product','Unit');
public function testFunction(){
$this->loadModel('Unit');
$this->Unit->test();
}
}
UintController.php中的函数测试是:
public function test(){
echo("test");
}
我的型号名称是产品和单位。 当我调用函数测试时,给我这个错误:
Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'prova' at line 1
在函数中现在为空但是给我这个错误。 我尝试过:
public $uses = array('Unit');
并使用$ uses取消该行。
我该如何解决?
答案 0 :(得分:4)
要从其他控制器调用某个功能,您可以使用requestAction:
“此函数从任何位置调用控制器的操作并从操作返回数据。传递的$ url是CakePHP相对URL(/ controllername / actionname / params)。要将额外数据传递给接收控制器操作添加到$ options数组“。
这就是您的代码的样子:
class ProductsController extends AppController
{
public $name = 'Products';
public $scaffold;
public $uses = array('Product','Unit');
public function testFunction() {
// Calls the action from another controller
echo $this->requestAction('/unit/test');
}
}
然后在UnitController
:
class UnitController extends AppController
{
public function test()
{
return 'Hello, I came from another controller.';
}
}
如CakePHP食谱中所说:
“如果在没有缓存的情况下使用requestAction可能导致性能不佳。很少适合在控制器或模型中使用”。
但是,最适合您的解决方案是在模型中创建一个函数,然后从您的控制器调用,如下所示:
class ProductsController extends AppController {
public $name = 'Products';
public $scaffold;
public $uses = array('Product','Unit');
public function testFunction() {
echo $this->Unit->test();
}
}
在Unit
模型中:
class Unit extends AppModel
{
public function test(){
return 'Hello, I came from a model!';
}
}