Yii::configure не работает в модуле init()

У меня есть модуль, вызывающий API, и я хочу загрузить для него файл конфигурации. В руководстве сказано, что я должен использовать функцию \Yii::configure. Я использую его, но он не применяет никаких новых конфигураций. И я попытался использовать массив вместо файла конфигурации, результат тот же

class API extends \yii\base\Module
{
    public $controllerNamespace = 'api\client\controllers';

    public function init()
    {
        parent::init();

//        \Yii::configure($this, require(__DIR__ . '/config/main.php'));

        \yii::configure($this, [
            'components' => [
                'user' => [
                    'class' => 'yii\web\UserTest',
                    'identityClass' => 'api\client\models\User',
                ],
            ]
        ]);

        echo \yii::$app->user->className();

        die();
    }
}

Как я могу переопределить конфигурацию в моем модуле?


person RahulG    schedule 24.10.2014    source источник


Ответы (2)


ОБНОВЛЕНИЕ

Вы должны использовать метод setComponents Yii::$app

    Yii::$app->setComponents(
        [
            'errorHandler'=>[
                'errorAction'=>'forum/forum/error',
                'class'=>'yii\web\ErrorHandler',
            ],     
            'user' => [
                'class' => 'yii\web\User',
                'identityClass' => 'app\modules\profile\models\User',
            ],
        ]
    ); 

СТАРЫЙ ОТВЕТ

Ошибок не выдавал? Ваш регистр неверен, поэтому вместо «yii» строчными буквами используйте «Yii» с заглавной буквы.

class API extends \yii\base\Module
{
    public $controllerNamespace = 'api\client\controllers';

    public function init()
    {
        parent::init(); 

        \Yii::configure($this, [
            'components' => [
                'user' => [
                    'class' => 'yii\web\UserTest',
                    'identityClass' => 'api\client\models\User',
                ],
            ]
        ]);

        echo \Yii::$app->user->className();

        die();
    }
}
person Stefano Mtangoo    schedule 24.10.2014
comment
Вы можете сделать var_dump(\Yii::$app->user);, чтобы посмотреть, что происходит? - person Stefano Mtangoo; 28.10.2014
comment
в основном вы хотите свой класс идентичности, не так ли? используйте обновленный ответ `echo \Yii::$app-›user-›identity-›className();` - person Stefano Mtangoo; 30.10.2014
comment
что делает var_dump(\Yii::$app->user->identity); printt? - person Stefano Mtangoo; 30.10.2014
comment
вам показался мой комментарий выше? что за дамп? - person Stefano Mtangoo; 31.10.2014
comment
Ой! Мои изменения не были сохранены (только сейчас понял. Так что проверьте обновленный пост - person Stefano Mtangoo; 31.10.2014
comment
Вы удалили свой комментарий? Вы сказали, что это сработало. Для меня он работает нормально. Если он не работает, значит, у вас что-то не так. Можете ли вы отредактировать сообщение и добавить свой текущий код? (Старые не удалять) - person Stefano Mtangoo; 12.11.2014

Я не вижу причин переопределять здесь компоненты приложения. Я бы использовал трюк @StefanoMtangoo, но чтобы установить компонент в сам модуль вместо Yii::$app:

public function init()
{
    parent::init();

    $this->setComponents([
        'db' => [
            'class' => 'yii2tech\filedb\Connection',
            'path' => '@app/builder/data',
        ]
    ]);
}

Затем сложная часть состоит в том, чтобы различать компоненты любого приложения и собственные компоненты вашего модуля. Например, если в моем модуле была модель, расширяющая yii\db\ActiveRecord я бы переопределил его getDB() следующим образом: (исходный код здесь):

public static function getDb()
{
    return Yii::$app->getModule('api')->get('db');
    // instead of: return Yii::$app->getDb();
}

Таким образом, какое бы приложение, использующее мой модуль, не имело или не имело компонент db, это не имеет значения.

person Salem Ouerdani    schedule 12.04.2017