Помогите пожалуйста новичку c Yii2-user

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »

Добрый вечер. Пытаюсь настроить Yii2-user. Переопределяю контроллер, появляется ошибка

Код: Выделить всё

Unknown Property – yii\base\UnknownPropertyException

Getting unknown property: yii\web\Application::manager

1. in /home/cabinet/web/nc.com/public_html/vendor/yiisoft/yii2/base/Component.php at line 143
134135136137138139140141142143144145146147148149150151152            foreach ($this->_behaviors as $behavior) {
                if ($behavior->canGetProperty($name)) {
                    return $behavior->$name;
                }
            }
        }
        if (method_exists($this, 'set' . $name)) {
            throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
        } else {
            throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
        }
    }
 
    /**
     * Sets the value of a component property.
     * This method will check in the following order and act accordingly:
     *
     *  - a property defined by a setter: set the property value
     *  - an event in the format of "on xyz": attach the handler to the event "xyz"
2. in /home/cabinet/web/nc.com/public_html/vendor/yiisoft/yii2/di/ServiceLocator.php – yii\base\Component::__get('manager') at line 73
3. in /home/cabinet/web/nc.com/public_html/vendor/dektrium/yii2-user/controllers/SecurityController.php – yii\di\ServiceLocator::__get('manager') at line 79
73747576777879808182838485     * Displays the login page.
     *
     * @return string|\yii\web\Response
     */
    public function actionLogin()
    {
        $model = $this->module->manager->createLoginForm();
 
        if ($model->load(\Yii::$app->getRequest()->post()) && $model->login()) {
            return $this->goBack();
        }
 
        return $this->render('login', [
4. dektrium\user\controllers\SecurityController::actionLogin()
5. in /home/cabinet/web/nc.com/public_html/vendor/yiisoft/yii2/base/InlineAction.php – call_user_func_array([app\controllers\LoginController, 'actionLogin'], []) at line 55
6. in /home/cabinet/web/nc.com/public_html/vendor/yiisoft/yii2/base/Controller.php – yii\base\InlineAction::runWithParams(['r' => 'login/login']) at line 150
7. in /home/cabinet/web/nc.com/public_html/vendor/yiisoft/yii2/base/Module.php – yii\base\Controller::runAction('login', ['r' => 'login/login']) at line 462
8. in /home/cabinet/web/nc.com/public_html/vendor/yiisoft/yii2/web/Application.php – yii\base\Module::runAction('login/login', ['r' => 'login/login']) at line 83
9. in /home/cabinet/web/nc.com/public_html/vendor/yiisoft/yii2/base/Application.php – yii\web\Application::handleRequest(yii\web\Request) at line 371
10. in /home/cabinet/web/nc.com/public_html/web/index.php – yii\base\Application::run() at line 12
6789101112 
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
 
$config = require(__DIR__ . '/../config/web.php');

 
пытаюсь подключить yii\web\Application не помогает
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение lynicidn »

что такое в вашем коде Yii::$app->manager?
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »

Это было в в виджете yii2-user (https://github.com/dektrium/yii2-user/b ... er.php#L79).

в Modul.php * @property ModelManager $manager
а в ModelManager.php * @method models\LoginForm createLoginForm

я так понимаю это имена
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение lynicidn »

компонент наверное надо установить через сервисные локатор
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »

Всмысле через composer?
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение lynicidn »

у тебя где то в коде ошибка, если код с репозитория то создавай issue в той репе, как я понимаю он должен браться из модуля а почему то по логам берется из Yii::$app
dmeroff
Сообщения: 101
Зарегистрирован: 2012.06.05, 14:32
Откуда: Петрозаводск
Контактная информация:

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение dmeroff »

Как устанавливали модуль? Как переопределяете контроллер?
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »

ставил через composer.

по документации

domen.com/controllers/SecurityController.php

Код: Выделить всё

<?php

namespace app\controllers;

use dektrium\user\controllers\SecurityController as BaseSecurityController;

class SecurityController extends BaseSecurityController
{

}
config/web.php

Код: Выделить всё


<?php

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

$config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'components' => [
        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => '1111111',
        ],
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'user' => [
            'identityClass' => 'app\models\User',
            'enableAutoLogin' => true,
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
            'useFileTransport' => true,
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'db' => require(__DIR__ . '/db.php'),
    ],
    'modules' => [
        'user' => [
            'class' => 'dektrium\user\Module',
            'components' => [
                'manager' => [
                    // Active record classes
                    //
                    'loginFormClass' => 'app\models\LoginForm',
                    'userClass'    => 'dektrium\user\models\User',
                    //
                    'profileClass' => 'dektrium\user\models\Profile',
                    'accountClass' => 'dektrium\user\models\Account',
                    // Model that is used on resending confirmation messages
                    'resendFormClass' => 'dektrium\user\models\ResendForm',
                    // Model that is used on logging in
                    //'loginFormClass' => 'dektrium\user\models\LoginForm',
                    // Model that is used on password recovery
                    //'passwordRecoveryFormClass' => 'dektrium\user\models\RecoveryForm',
                    // Model that is used on requesting password recovery
                    //'passwordRecoveryRequestFormClass' => 'dektrium\user\models\RecoveryRequestForm',
                ],
            ],
            'controllerMap' => [
                'security' => 'app\controllers\SecurityController'
            ],
        ],
    ],
    'params' => $params,
];

if (YII_ENV_DEV) {
    // configuration adjustments for 'dev' environment
    $config['bootstrap'][] = 'debug';
    $config['modules']['debug'] = 'yii\debug\Module';

    $config['bootstrap'][] = 'gii';
    $config['modules']['gii'] = 'yii\gii\Module';
}

return $config;

при запросе http://domen.my/web/index.php?r=security/login выдает вот эту ошибку.
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »


у тебя где то в коде ошибка, если код с репозитория то создавай issue в той репе, как я понимаю он должен браться из модуля а почему то по логам берется из Yii::$app
я только учусь, не понял что мне надо сделать :(
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »

Я переназначил action в domen.com/controllers/SecurityController.php, вроде заработало

Код: Выделить всё


        $m = new ModelManager();
        $model = $m->createLoginForm();

вместо

Код: Выделить всё


$model = $this->module->manager->createLoginForm();

но мне кажется что так не правильно(((
dmeroff
Сообщения: 101
Зарегистрирован: 2012.06.05, 14:32
Откуда: Петрозаводск
Контактная информация:

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение dmeroff »

Используйте $this->getModule('user') вместо $this->module, потому что SiteController не находится в модуле user, поэтому то и его свойство module указывает на yii\web\Application.
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »

Тогда выдает ошибку

Код: Выделить всё


Calling unknown method: app\controllers\RecoveryController::getModule()

 
Я в SiteController не вызываю action. Я использую тот контроллер который переопределяет
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение lynicidn »

он скорее перепутал с уии1, все верно $this->module, но у вас контроллер создается и вродитель к нему поступает апп, вы как контроллер прописываете в конфиге?
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »

в config/web.php?

Код: Выделить всё


'controllerMap' => [
                'security' => 'app\controllers\SecurityController',

Получается когда я переопределяю контролер перестают работать в переопределяемом и в переопределяющем action выдавая ошибку
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение lynicidn »

контроллер надо от мудуля же, а точно алиас верный? это контроллер модуля?
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »

Делаю по документации к виджету.

Есть контролер авторизации (есть и другие(регистрация, восстановления)), не хочется менять код виджета, а надо изменить регистрацию. Вот и хочу его переопределить и изменять в контролерах проекта.

Вот страничка в документации по которой я делаю http://yii2-user.readthedocs.org/en/lat ... llers.html

Модуль тоже переопределяю, но с ним проблем нет. Там все получилось без проблем
dmeroff
Сообщения: 101
Зарегистрирован: 2012.06.05, 14:32
Откуда: Петрозаводск
Контактная информация:

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение dmeroff »

Я ошибся, Yii::$app->getModule('user')->manager - вот так можно обратиться к модулю user.
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »

Получилось, спасибо большое!!!
А объясните что происходило? Я так понял при переопределении контролера, он терял связь с модулем user?
dmeroff
Сообщения: 101
Зарегистрирован: 2012.06.05, 14:32
Откуда: Петрозаводск
Контактная информация:

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение dmeroff »

Конечно терял, ведь свойство module у контроллера указывает на модуль, в котором он определен. Ваш контроллер объявлен внутри папки контроллеров приложения (app\controllers), соответственно свойство module указывает на yii\web\Application.
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »

Спасибо большое за объяснение. А роли назначать просто по умолчанию? Или как-то по другому?
Ответить