【问题标题】:Use Model from inside a Library cakephp在库 cakephp 中使用模型
【发布时间】:2013-12-03 22:08:19
【问题描述】:

我在 app/Lib 文件夹中创建了一些文件,并希望从库类中访问我的模型之一:

<?php 

App::uses('CrawlerBase','Lib');
App::uses('Deal', 'Model');

class SampleCrawler extends CrawlerBase {

    public $uses = array('Deal');

    function __construct(){
          $this->Deal->create();

但是,cake 似乎找不到 Deal 模型,并且我在模型创建行中的非对象上调用了成员函数 create()。

感谢您的帮助。

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    如果不在控制器/外壳中,请始终手动包含模型:

    $this->Deal = ClassRegistry::init('Deal');
    

    然后

    $this->Deal->create(); // etc
    

    优点:你让 Cake 为你加载和初始化模型,所以如果你之前已经这样做了,它会尝试重用它。

    编辑:为了完整起见,在控制器/外壳中您可以简单地做

    $this->loadModel('Deal');
    $this->Deal->create();
    

    【讨论】:

    • ClassRegistry 必须先用 App::uses('ClassRegistry', 'Utility'); 调用
    【解决方案2】:

    其他方式也可以做到这一点:

    APP::import('Model', 'Deal');
    $this->Deal = new Deal();
    
    $this->Deal->create();
    

    【讨论】:

    • App::import 不再用于 2.x 中,除了供应商加载。如果有的话,使用 App::uses() 加载(内部)类。但我总是更喜欢 ClassRegistry::init() 来加载模型。
    【解决方案3】:

    试试;

    $deal = 新交易(); // 创建交易对象 //如果这不起作用,那么做 ClassRegistry::init("交易"); $deal = 新交易();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-27
      • 2023-03-07
      • 2012-04-04
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多