1

我是 cakephp 的新手。我有一个名为 Rest 的类,由两个控制器共享:页面和类别。

因此,我想到了在 AppController 中创建类的实例:

class AppController extends Controller {
    public $rest;


    public function DoRest() {
        require 'Component/Rest.php';

        if(!isset($this->rest))
        $this -> rest = new Rest();

        return $this -> rest;
    }
}

然后我可以在 categoriesController 中访问它:

public function index() 
    {
        if ($this->request->is('requested')) {
            return $this -> DoRest() -> getCategories();
        } else {
            $this -> set('categories', $this -> DoRest() -> getCategories());
        }
    }

在页面控制器中:

public function category() {

        $this -> set('items',$this -> DoRest() -> getCategoryById($this->request->query['id']));
    }

在 category.ctp 中,我可以通过以下方式访问类别:

$categories = $this->requestAction('categories/index');

但是现在我收到此错误: Error: Cannot redeclare class Rest

我做错了什么?

4

2 回答 2

1
require 'Component/Rest.php';

那不是它在蛋糕上的做法。请阅读文档。如果有什么你使用 App::uses()。

但是对于组件,您应该遵循官方方式:

public $components = array('Rest');

并且组件类文件应命名为 RestComponent.php,再次如文档所述。

如果您使用的是其他东西,它不是一个组件,而是一个库,并且需要上面的 app::uses() (然后将您的文件放在 /Lib 文件夹中):

App::uses('Rest', 'Lib');
于 2013-05-29T11:39:09.963 回答
1

你有几个问题。首先,您没有以“蛋糕”的方式包含文件;其次,您也没有以“蛋糕”的方式命名组件。

组件应该使用这样的后缀。所以你的 Rest 组件应该是这样的:

<?php
class RestComponent extends Component {
}

其次,组件应该通过相关属性加载到你的控制器中:

<?php
class YourController extends AppControler {
    public $components = array('Rest');
}

然后一切都应该工作。但是,我会质疑您是否需要创建一个 Rest 组件。CakePHP 有内置的REST 处理,还有一个HTTP 组件,用于通过 HTTP 向第三方服务发出请求。

于 2013-05-29T11:43:12.010 回答