【问题标题】:Error: Cannot redeclare class in cakephp错误:无法在 cakephp 中重新声明类
【发布时间】:2013-05-29 19:43:12
【问题描述】:

我是 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

我做错了什么?

【问题讨论】:

  • 刚刚,没解决:(
  • @nlsbshtr 我明白了,Rest 类中有一个文件也需要。在碰巧到 require_once 'PestXML.php' 之后;解决了错误。但是,尽管在 AppController 中调用了 Rest 类,但它似乎被调用了两次。我应该如何防止类别和页面使用相同的 Rest 实例?

标签: php cakephp


【解决方案1】:

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

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

<?php
class RestComponent extends Component {
}

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

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

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

【讨论】:

  • aah 比另一个更全面。我必须公平并接受这个:) 感谢您提供有关休息处理的信息和提示,我也会对其进行调整。
  • 没问题。一旦你熟练使用 Cake,它就是一个可爱的框架。坚持下去!
  • 确实,它运作良好。我实际上仍然有点困惑模型代表什么。它和 Java Bean 一样吗?像pojo类?我注意到它与 Model with C# Mvc 完全不同...
  • 业务逻辑需要去哪里?到控制器还是组件?
  • 我不熟悉 Java,但模型是 MVC 范式的一部分(Cake 遵循),与 Rails 非常相似。模型代表一个数据库表,允许您在数据库中保存和检索数据。开始阅读CakePHP book,因为这将使您快速了解 Cake 的原则和最佳实践。
【解决方案2】:
require 'Component/Rest.php';

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

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

public $components = array('Rest');

并且组件类文件应该命名为RestComponent.php,同样如文档所述。

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

App::uses('Rest', 'Lib');

【讨论】:

    猜你喜欢
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多