我有一个网站在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');
并用$用法取消线。
我该如何解决?
要从另一个控制器调用函数,您可以使用requestAction:
定义
"此函数从任何位置调用控制器的操作,并从操作中返回数据。$ URL传递的是cakepHP相关的URL(/controlerName/actionname/params)。将额外的数据传递到接收控制器操作添加到接收控制器操作。$选项数组"。
用法
这就是您的代码的样子:
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食谱中所述:
"如果没有缓存请求的使用可能会导致性能差。在控制器或模型中使用很少。
最佳解决方案
但是,最适合您的解决方案是在模型中创建一个函数,然后从控制器中调用:
: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!';
}
}