【问题标题】:CakePHP update public $uses = false; in action from same ControllerCakePHP 更新公共 $uses = false;来自同一个控制器的行动
【发布时间】:2014-08-05 04:42:53
【问题描述】:

我正在为我的 CakePHP Web 应用程序编写一个安装脚本。我有一个InstallController,有 6 个操作:step1step2step3 等。

step1 我正在处理Config/database.php 的创建。因为这个文件是空的并且没有可用的数据源我必须在InstallController中设置public $uses = false;

step2 设置了Config/database.php 文件,因此我应该能够连接到数据源。这也是必要的,因为我想在以下步骤中更新一些数据库字段。

是否可以在step1 之后的每个步骤中更新public $uses = false;

我使用的是 CakePHP 2.3.5 版

【问题讨论】:

  • 请始终提及您的确切 CakePHP 版本并相应地标记您的问题!

标签: cakephp cakephp-2.3


【解决方案1】:

您是否考虑过在动作中加载模型?所以,类似:

<?php

App::uses('AppController', 'Controller');

class InstallController extends AppController {
    public $uses = false;

    public function step1() {

    }

    public function step2() {
        $this->loadModel("Install");
        $this->Install->callMethod();
    }
}

【讨论】:

    【解决方案2】:

    在 CakePHP 2.x 中,模型是延迟加载的,所以只要您的 step1 操作不尝试使用模型,您就可以安全地在控制器的 $uses 属性中声明模型,它们不是直到你的代码真正使用它们为止。

    但是,如果由于某种原因您确实需要修改 $uses,那么就这样做吧,因为提到的模型是延迟加载的,因此您可以随时修改 $uses,然后通过以下方式访问模型控制器上的魔法属性。

    【讨论】:

    • 当我使用 public $uses = array('Install'); 时,我得到一个数据源错误。罗斯福的解决方案对我有用。不过感谢您的信息!
    猜你喜欢
    • 2013-08-11
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多