【问题标题】:yii2 fixtures doesn't work properlyyii2 灯具不能正常工作
【发布时间】:2014-11-09 09:49:42
【问题描述】:

我在 yii2 中的固定装置有问题,我刚刚根据this document 创建了所有必需的文件,但它不起作用。 让我解释一下,我有一个名为 Authyii 的模块,在这个模块内我有一个名为 User 的模型。 这是我的目录结构:

我的夹具文件是这样的:

namespace app\modules\Authyii\tests\fixtures;


use app\modules\Authyii\models;
use yii\test\ActiveFixture;
use yii\test\Fixture;

class UserFixture extends ActiveFixture
{
    public $modelClass = 'app\modules\Aythyii\models\User';
    public $tableName = 'authyii_user';

}

这是我的命令行:

但在我输入“是”后,命令行显示:

但是当我检查我的数据库时,authyii_user 表中没有新记录。 我错过了什么?

【问题讨论】:

  • 命名空间 'app\modules\Aythyii\models\User' 是否正确?将“Aythyii”更改为“Authyii”
  • @RaminMousavi 感谢您的关注,我更正了错字,但问题仍然存在。

标签: testing yii2 fixture


【解决方案1】:

文件User.php id 数据目录必须有表名authyii_user.php。在文件ActiveFixture.php中的框架源代码行代码:

$dataFile = dirname($class->getFileName()) . '/data/'
    . $this->getTableSchema()->fullName . '.php';

最好的问候。

【讨论】:

    【解决方案2】:

    在\vendor\yiisoft\yii2\console\controllers\FixtureController.php中有getFixturesConfig()方法

    private function getFixturesConfig($fixtures)
    {
        $config = [];
    
        foreach ($fixtures as $fixture) {
    
            $isNamespaced = (strpos($fixture, '\\') !== false);
            $fullClassName = $isNamespaced ? $fixture . 'Fixture' : $this->namespace . '\\' . $fixture . 'Fixture';
    
            if (class_exists($fullClassName)) { // <<< I think you lose your UserFixture here
                $config[] = $fullClassName;
            }
        }
    
        return $config;
    }
    

    您应该检查$fullClassName Yii 的期望(例如记录或回显它)并相应地调整您的UserFixture 的命名空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多