bupy7 / yii2-activerecord-history

This extension adds storage history of changes to the ActiveRecord model.
26 stars 17 forks source link

Usage with yii2-user #1

Closed maxxer closed 8 years ago

maxxer commented 8 years ago

The Module::init checks that the User component is yii\web\User. When using the yii2-user extension the component class can be a custom one, like app\models\User. This makes migration fails with the following message:

$ ./yii migrate/up --migrationPath=@bupy7/activerecord/history/migrations
Exception 'yii\base\InvalidConfigException' with message '"user" refers to a app\models\User component. yii\web\User is expected.'

in /home/maxxer/yii2app/vendor/yiisoft/yii2/di/Instance.php:135

Stack trace:
#0 /home/maxxer/yii2app/vendor/bupy7/yii2-activerecord-history/Module.php(42): yii\di\Instance::ensure('user', 'yii\\web\\User')
#1 /home/maxxer/yii2app/vendor/yiisoft/yii2/base/Object.php(107): bupy7\activerecord\history\Module->init()
#2 /home/maxxer/yii2app/vendor/yiisoft/yii2/base/Module.php(138): yii\base\Object->__construct(Array)
#3 [internal function]: yii\base\Module->__construct('arhistory', Object(yii\console\Application), Array)
#4 /home/maxxer/yii2app/vendor/yiisoft/yii2/di/Container.php(373): ReflectionClass->newInstanceArgs(Array)
#5 /home/maxxer/yii2app/vendor/yiisoft/yii2/di/Container.php(154): yii\di\Container->build('bupy7\\activerec...', Array, Array)
#6 /home/maxxer/yii2app/vendor/yiisoft/yii2/BaseYii.php(344): yii\di\Container->get('bupy7\\activerec...', Array, Array)
#7 /home/maxxer/yii2app/vendor/yiisoft/yii2/base/Module.php(353): yii\BaseYii::createObject(Array, Array)
#8 /home/maxxer/yii2app/vendor/yiisoft/yii2/base/Application.php(304): yii\base\Module->getModule('arhistory')
#9 /home/maxxer/yii2app/vendor/yiisoft/yii2/base/Application.php(267): yii\base\Application->bootstrap()
#10 /home/maxxer/yii2app/vendor/yiisoft/yii2/console/Application.php(124): yii\base\Application->init()
#11 /home/maxxer/yii2app/vendor/yiisoft/yii2/base/Object.php(107): yii\console\Application->init()
#12 /home/maxxer/yii2app/vendor/yiisoft/yii2/base/Application.php(206): yii\base\Object->__construct(Array)
#13 /home/maxxer/yii2app/vendor/yiisoft/yii2/console/Application.php(89): yii\base\Application->__construct(Array)
#14 /home/maxxer/yii2app/yii(19): yii\console\Application->__construct(Array)
#15 {main}

Is it possible to make it work with any custom User class?

bupy7 commented 8 years ago

It must work for all: https://github.com/bupy7/yii2-activerecord-history/blob/master/Module.php#L33

Give me code of the app\models\User, please.

maxxer commented 8 years ago
<?php

/**
 * Override del modello User di Yii2-Users per ottere isAdmin da RBAC
 */

namespace app\models;
use dektrium\user\models\User as BaseUser;

/**
 * User ActiveRecord model.
 *
 * @inherit
 */
class User extends BaseUser
{

}
bupy7 commented 8 years ago

@maxxer you need specify the COMPONENT and does not the MODEL in user property of module. give me your the config file, please.

maxxer commented 8 years ago

Hm I think I did that. Here's the console config:

<?php

Yii::setAlias('@tests', dirname(__DIR__) . '/tests/codeception');

$params = require(__DIR__ . '/params.php');
$db = require(__DIR__ . '/db.php');

$config = [
    'id' => 'basic-console',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log', 'arhistory'],
    'controllerNamespace' => 'app\commands',
    'components' => [
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'log' => [
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'user' => [
            'class' => 'app\models\User',
            'identityClass' => 'dektrium\user\models\User',
        ],
        'db' => $db,
    ],
    'modules' => [
        'user' => [
            'class' => 'dektrium\user\Module',
            'enableRegistration' => false,
            'enableConfirmation' => false,
        ],
        'rbac' => 'dektrium\rbac\RbacConsoleModule',
        'arhistory' => [
            'class' => 'bupy7\activerecord\history\Module',
        ],
    ],
    'params' => $params,
    /*
    'controllerMap' => [
        'fixture' => [ // Fixture generation command line.
            'class' => 'yii\faker\FixtureController',
        ],
    ],
    */
];

if (YII_ENV_DEV) {
    // configuration adjustments for 'dev' environment
    $config['bootstrap'][] = 'gii';
    $config['modules']['gii'] = [
        'class' => 'yii\gii\Module',
    ];
}

return $config;
bupy7 commented 8 years ago
        'user' => [
            'class' => 'app\models\User',
            'identityClass' => 'dektrium\user\models\User',
        ],

what is? =) class is incorrect.

        'user' => [
            'class' => 'yii\web\User',
            'identityClass' => 'app\models\User',
        ],

you should fix it

maxxer commented 8 years ago

Yii2-user requires the user's component key to be omitted. In case it's needed must be filled like this:

'user' => [
    'class' => 'app\components\User',
    'identityClass' => 'dektrium\user\models\User',
],

so I've placed there my model

bupy7 commented 8 years ago

@maxxer where class there must be COMPONENT and does not MODEL. I above write it.

maxxer commented 8 years ago

so replacing it with

'class' => 'yii\web\User',

should be enough? Indeed I tried now and running the console command doesn't return any error...

bupy7 commented 8 years ago

Yes, it enough. =)

maxxer commented 8 years ago

oh thanks, sorry for the mistake!

bupy7 commented 8 years ago

Don't worry, @maxxer =)

maxxer commented 8 years ago

and thank you for this very useful extension!

bupy7 commented 8 years ago

;-)