1

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

我该如何解决?

4

1 回答 1

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 Cookbook 中所说:

“如果在没有缓存 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!';
    }    
}
于 2012-11-02T01:37:53.047 回答