【问题标题】:How do I use Model in Helper - CakePHP 2.x如何在 Helper 中使用模型 - CakePHP 2.x
【发布时间】:2012-11-13 05:59:30
【问题描述】:

我最近将我的应用从 cake 1.3.x 升级到 cake 2.x。现在我有一个在某些功能中使用模型的助手。最初加载模型的语法是(适用于 1.3.x)

     App::import('Model', $modelName);
     $modelObject = &ClassRegistry::getObject($modelName);    
     $modelObject->find()

现在我改成关注了

    App::uses($modelName,'Model');
    $modelObject = &ClassRegistry::getObject($modelName);
    $modelObject->find()

问题是,这种转换不起作用。谁能告诉我我在哪里做错了。提前致谢。

PS: 错误信息是:
在非对象上调用成员函数 find()

【问题讨论】:

  • 正确的语法总是$User = ClassRegistry::init('User')

标签: cakephp cakephp-2.0


【解决方案1】:

工作代码应该是

//let $modelName be User  
App::import("Model", "User");  
$model = new User();  
$model->find("list");  

希望对有需要的小伙伴有所帮助

【讨论】:

  • 正确答案应该是“你不知道”,因为在帮助程序中使用模型会破坏 MVC。您的用户列表应该在您的控制器中定义,然后仅由视图使用。
  • @nIcO 我非常了解 MVC,但有时我们需要将一些 ID 等作为相关数据显示给用户以便更好地理解......这是其中一种情况。无论如何感谢您的帮助
【解决方案2】:

你也可以在 helper 中加载模型,在 helper 类中添加如下方法:

第一步:

public function loadModel($modelClass = null, $id = null) {
    if ($modelClass === null) {
        $modelClass = $this->modelClass;
    }

    $this->uses = ($this->uses) ? (array) $this->uses : array();
    if (!in_array($modelClass, $this->uses, true)) {
        $this->uses[] = $modelClass;
    }

    list($plugin, $modelClass) = pluginSplit($modelClass, true);

    $this->{$modelClass} = ClassRegistry::init(array(
                'class' => $plugin . $modelClass, 'alias' => $modelClass, 'id' => $id
    ));
    if (!$this->{$modelClass}) {
        throw new MissingModelException($modelClass);
    }
    return true;
}

Step2:像在控制器中那样调用上述方法:

$this->loadModel(ModelName);

我希望这能解决问题

【讨论】:

    【解决方案3】:

    我想通过helper以foreach的形式查看数据

    public function display()
    {
        $links = TableRegistry::getTableLocator()->get('category');
        $category = $links->find('all')
            ->where(['status' => 1, 'position' => 0])
            ->select([
                "category" => 'parent', 'name'
            ])
            ->toArray();
        return $category['category'];
    }
    

    【讨论】:

    • 这是一个问题还是一个答案?
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 2011-07-09
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    相关资源
    最近更新 更多