cakephp调用另一个模型错误的函数

时间:2012-11-01 21:58:44

标签: cakephp cakephp-2.0

我在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取消该行。

我该如何解决?

1 个答案:

答案 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!';
    }    
}