Ошибки при расширения модуля с dektrium на cingle

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
rosswe
Сообщения: 95
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Ошибки при расширения модуля с dektrium на cingle

Сообщение rosswe »

Доброго времени суток.
при расширения модуля с dektrium на cingle.
выдаёт ошибки.

при авторизации

Setting unknown property: cinghie\yii2userextended\models\User::last_login_at

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

<?php
namespace dektrium\user\models;

use dektrium\user\Finder;
use dektrium\user\helpers\Password;
use dektrium\user\traits\ModuleTrait;
use yii\helpers\ArrayHelper;
use yii\helpers\Html;
use Yii;
use yii\base\Model;

class LoginForm extends Model
{
    use ModuleTrait;

    /** @var string User's email or username */
    public $login;

    /** @var string User's plain password */
    public $password;

    /** @var string Whether to remember the user */
    public $rememberMe = false;

    /** @var \dektrium\user\models\User */
    protected $user;
/
    protected $finder;

    public function __construct(Finder $finder, $config = [])
    {
        $this->finder = $finder;
        parent::__construct($config);
    }

    public static function loginList()
    {
        return ArrayHelper::map(User::find()->where(['blocked_at' => null])->all(), 'username', function ($user) {
            return sprintf('%s (%s)', Html::encode($user->username), Html::encode($user->email));
        });
    }

    public function attributeLabels()
    {
        return [
            'login'      => Yii::t('user', 'Login'),
            'password'   => Yii::t('user', 'Password'),
            'rememberMe' => Yii::t('user', 'Remember me next time'),
        ];
    }

    public function rules()
    {
        $rules = [
            'requiredFields' => [['login'], 'required'],
            'loginTrim' => ['login', 'trim'],
            'confirmationValidate' => [
                'login',
                function ($attribute) {
                    if ($this->user !== null) {
                        $confirmationRequired = $this->module->enableConfirmation
                            && !$this->module->enableUnconfirmedLogin;
                        if ($confirmationRequired && !$this->user->getIsConfirmed()) {
                            $this->addError($attribute, Yii::t('user', 'You need to confirm your email address'));
                        }
                        if ($this->user->getIsBlocked()) {
                            $this->addError($attribute, Yii::t('user', 'Your account has been blocked'));
                        }
                    }
                }
            ],
            'rememberMe' => ['rememberMe', 'boolean'],
        ];

        if (!$this->module->debug) {
            $rules = array_merge($rules, [
                'requiredFields' => [['login', 'password'], 'required'],
                'passwordValidate' => [
                    'password',
                    function ($attribute) {
                        if ($this->user === null || !Password::validate($this->password, $this->user->password_hash)) {
                            $this->addError($attribute, Yii::t('user', 'Invalid login or password'));
                        }
                    }
                ]
            ]);
        }

        return $rules;
    }

    public function validatePassword($attribute, $params)
    {
      if ($this->user === null || !Password::validate($this->password, $this->user->password_hash))
        $this->addError($attribute, Yii::t('user', 'Invalid login or password'));
    }

    public function login()
    {
        if ($this->validate()) {
            $this->user->updateAttributes(['last_login_at' => time()]);
            return Yii::$app->getUser()->login($this->user, $this->rememberMe ? $this->module->rememberFor : 0);
        }

        return false;
    }


    public function formName()
    {
        return 'login-form';
    }

    public function beforeValidate()
    {
        if (parent::beforeValidate()) {
            $this->user = $this->finder->findUserByUsernameOrEmail(trim($this->login));

            return true;
        } else {
            return false;
        }
    }
}
при загрузки файлов img в профиль.

move_uploaded_file(/var/www/test.com/basic/web/img/users/4Z-9R3ki6Wg94iNrl4OUR-n8VPV43Tyb.jpg): failed to open stream: No such file or directory

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

class SettingsController extends BaseController
{
    public function actionProfile()
    {
        // Load Model
        $model       = $this->finder->findProfileById(Yii::$app->user->identity->getId());
        // Load Old Image
        $oldImage    = $model->avatar;
        // Load avatarPath from Module Params
        $avatarPath  = Yii::getAlias(Yii::$app->getModule('userextended')->avatarPath);

        // Create uploadAvatar Instance
        //$model->save();
        $image = $model->uploadAvatar($avatarPath);

        // Ajax Validation
        $this->performAjaxValidation($model);
        //&& $model->save()
       if ($model->load(Yii::$app->request->post())&& $model->save()) {

            // revert back if no valid file instance uploaded
            if ($image === false) {
                $model->avatar = $oldImage;
            } else {
                
                // if is there an old image, delete it
                if($oldImage)
                {
                    $model->deleteImage($oldImage);
                }

                // upload new avatar
                $model->avatar = $image->name;
            }

            Yii::$app->getSession()->setFlash('success', Yii::t('user', 'Your profile has been updated'));

            return $this->refresh();
        }

        return $this->render('profile', [
            'model' => $model
        ]);
    }

}
модель

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

    public function uploadAvatar($filePath)
    {
        $file = UploadedFile::getInstance($this, 'avatar');

        // if no file was uploaded abort the upload
        if (empty($file)) {
            return false;
        } else {

            // file extension
            $fileExt = $file->extension;
            // purge filename
            $fileName = Yii::$app->security->generateRandomString();
            // update file->name
            $file->name = $fileName.".{$fileExt}";
            // update avatar field
            $this->avatar = $fileName.".{$fileExt}";
            // save images to imagePath
            $file->saveAs($filePath.$fileName.".{$fileExt}");
            // the uploaded file instance
            return $file;
        }
    }

 
    public function getImagePath()
    {
        return $this->avatar ? Yii::getAlias(Yii::$app->getModule('userextended')->avatarPath).$this->avatar : null;
    }

   
    public function getImageUrl()
    {
        if ( !is_null($this->getAccountAttributes()) && !$this->avatar )
        {
            $imageURL = $this->getSocialImage();

        } else {

            $avatar   = $this->avatar ? $this->avatar : 'default.png';
            $imageURL = Yii::getAlias(Yii::$app->getModule('userextended')->avatarURL).$avatar;
        }

        return $imageURL;
    }

поделитесь решением ,если нужны какие то ещё файлы я предоставлю..
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Ошибки при расширения модуля с dektrium на cingle

Сообщение rak »

1. есть ли в таблице users поле last_login_at и не включено ли кеширование схемы в компоненте бд?
2. поставить права 0777 на папку /web/img/users/
rosswe
Сообщения: 95
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Ошибки при расширения модуля с dektrium на cingle

Сообщение rosswe »

1. есть ли в таблице users поле last_login_at и не включено ли кеширование схемы в компоненте бд?
//
нет нету этого поля в users
кеширование схемы только записанно в web.php
'cache' => [
'class' => 'yii\caching\FileCache',
],
...
2.поставить права 0777 на папку /web/img/users/
//
поставил - заработало.

Если я миграцией создам поле last_login_at в users .должна заработать авторизация,а какое содержание поля?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Ошибки при расширения модуля с dektrium на cingle

Сообщение rak »

rosswe писал(а): 2017.01.12, 00:41 Если я миграцией создам поле last_login_at в users .должна заработать авторизация,а какое содержание поля?
откуда ж я знаю :) нужно смотреть в модуль, там должна быть информация по установке(ну или смотреть схему бд из этого модуля)
rosswe
Сообщения: 95
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Ошибки при расширения модуля с dektrium на cingle

Сообщение rosswe »

Всё делал по этой инструкции https://packagist.org/packages/cinghie/ ... ded#v0.5.8
вот схема ,но там нет такого поля last_login_at и ручками оно не добавляется говорит #1064

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

class m151020_213100_update_profile_table extends Migration
{
    
    public function up()
    {
        $this->addColumn('{{%profile}}', 'firstname', Schema::TYPE_STRING. ' DEFAULT NULL');
        $this->addColumn('{{%profile}}', 'lastname', Schema::TYPE_STRING. ' DEFAULT NULL');
        $this->addColumn('{{%profile}}', 'birthday', Schema::TYPE_DATE. ' NOT NULL');
        $this->addColumn('{{%profile}}', 'avatar', Schema::TYPE_STRING. ' NOT NULL');
        $this->addColumn('{{%profile}}', 'terms', 'tinyint(1) NOT NULL DEFAULT 0');
    }

    public function down()
    {
        $this->dropColumn('{{%profile}}', 'firstname');
        $this->dropColumn('{{%profile}}', 'lastname');
        $this->dropColumn('{{%profile}}', 'birthday');
        $this->dropColumn('{{%profile}}', 'avatar');
        $this->dropColumn('{{%profile}}', 'terms');
    }

}
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Ошибки при расширения модуля с dektrium на cingle

Сообщение rak »

логично, миграция на таблицу profile, а ошибка про таблицу user
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Ошибки при расширения модуля с dektrium на cingle

Сообщение rak »

подозреваю, что last_login_at должен быть datetime/timestamp/int
rosswe
Сообщения: 95
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Ошибки при расширения модуля с dektrium на cingle

Сообщение rosswe »

добавил в user last_login_at(INT) через SQL .
работает,записывает.
cпс.
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: Ошибки при расширения модуля с dektrium на cingle

Сообщение Faenir »

Зачем через SQL? Есть же миграции.
https://github.com/dektrium/yii2-user/b ... _table.php
Нужно было просто выполнить

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

yii migrate/up --migrationPath=@vendor/dektrium/yii2-user/migrations
rosswe
Сообщения: 95
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Ошибки при расширения модуля с dektrium на cingle

Сообщение rosswe »

привычка.))
dox
Сообщения: 12
Зарегистрирован: 2012.05.23, 18:08

Re: Ошибки при расширения модуля с dektrium на cingle

Сообщение dox »

Привет. после апдейта модуля этого тоже столкнулся с этой проблемой и как правильно заметил Faenir, нужно было запустить миграции самого модуля.
Ответить