• Как очистить assets?

    @soy4er Автор вопроса
    Ребят, ну подскажите пожалуйста, как обновить эти assets на сайте
  • Как убрать автопереход под другого пользователя?

    @soy4er Автор вопроса
    Я заметил, что идет переход на другой аккаунт не просто по клику на что то, а через какое то время. То есть, я могу прокликать все что можно, не перейти, уйти на какое то время, придти и я уже под другим аккаунтом.

    Возможно это как то связано с куки авторизацией?
    frontend/config/main.php
    'user' => [
                'identityClass' => 'common\models\User',
                'enableAutoLogin' => true,
                'identityCookie' => ['name' => '_identity-frontend', 'httpOnly' => true],
            ],
  • Как убрать автопереход под другого пользователя?

    @soy4er Автор вопроса
    Иван, перерыл весь код, ничего не могу найти

    User.php
    class User extends ActiveRecord implements IdentityInterface
    {
        const STATUS_DELETED = 0;
        const STATUS_ACTIVE = 10;
        const STATUS_WAIT = 5;
    
        const DATE_FORMAT = 'php:Y-m-d';
        const DATETIME_FORMAT = 'php:Y-m-d H:i:s';
        const TIME_FORMAT = 'php:H:i:s';
    
    
        /**
         * @inheritdoc
         */
        public static function tableName()
        {
            return '{{%user}}';
        }
    
        /**
         * @inheritdoc
         */
        public function behaviors()
        {
            return [
                TimestampBehavior::className(),
            ];
        }
    
        /**
         * @inheritdoc
         */
        public function rules()
        {
            return [
                ['status', 'default', 'value' => self::STATUS_ACTIVE],
                ['status', 'in', 'range' => [self::STATUS_DELETED, self::STATUS_WAIT, self::STATUS_ACTIVE]],
            ];
        }
    
        public function afterSave($insert, $changedAttributes)
        {
            $findUser = Score::find()->where(['user_id' => $this->getId()])->one();
            if (!$findUser){
                $userBalance = new Score;
                $userBalance->user_id = $this->getId();
                $userBalance->balance = 0;
                
                if($userBalance->validate()){
                    return $userBalance->save();
                } else die('Что-то пошло не так!');
            }
    
            parent::afterSave($insert, $changedAttributes);
        }
    
        public function getScore($userId = null)
        {
            if ($userId)
                return $userScore = Score::find()->where(['user_id' => $userId])->one()->balance;
    
            return $userScore = Score::find()->where(['user_id' => Yii::$app->user->id])->one()->balance;
        }
    
        /**
         * @inheritdoc
         */
        public static function findIdentity($id)
        {
            return static::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]);
        }
    
        /**
         * @inheritdoc
         */
        public static function findIdentityByAccessToken($token, $type = null)
        {
            throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.');
        }
    
        /**
         * Finds user by username
         *
         * @param string $username
         * @return static|null
         */
        public static function findByUsername($username)
        {
            return static::findOne(['username' => $username]);
        }
        
        public static function getAllUsername()
        {
            $users = (new Query())->select(['username', 'id'])->from('user')->all();
            foreach ($users as $value) {
                $data[$value['id']] = $value['username'];
            }
            if (isset($data)) return $data;
            else return false;
        }
    
        public function getAvatar()
        {
            if ($this->photo_type != 1)
                return '/uploads/profile/'.$this->id.'/'.$this->photo;
            else
                return '/images/profile/'.$this->photo;
        }
    
        public static function getAll()
        {
            $data = self::find()->all();
            return $data;
        }
        
    
        /**
         * Finds user by password reset token
         *
         * @param string $token password reset token
         * @return static|null
         */
        public static function findByPasswordResetToken($token)
        {
            if (!static::isPasswordResetTokenValid($token)) {
                return null;
            }
    
            return static::findOne([
                'password_reset_token' => $token,
                'status' => self::STATUS_ACTIVE,
            ]);
        }
    
        /**
         * Finds out if password reset token is valid
         *
         * @param string $token password reset token
         * @return bool
         */
        public static function isPasswordResetTokenValid($token)
        {
            if (empty($token)) {
                return false;
            }
    
            $timestamp = (int) substr($token, strrpos($token, '_') + 1);
            $expire = Yii::$app->params['user.passwordResetTokenExpire'];
            return $timestamp + $expire >= time();
        }
    
        /**
         * @inheritdoc
         */
        public function getId()
        {
            return $this->getPrimaryKey();
        }
    
        /**
         * @inheritdoc
         */
        public function getAuthKey()
        {
            return $this->auth_key;
        }
    
        /**
         * @inheritdoc
         */
        public function validateAuthKey($authKey)
        {
            return $this->getAuthKey() === $authKey;
        }
    
        /**
         * Validates password
         *
         * @param string $password password to validate
         * @return bool if password provided is valid for current user
         */
        public function validatePassword($password)
        {
            return Yii::$app->security->validatePassword($password, $this->password_hash);
        }
    
        /**
         * Generates password hash from password and sets it to the model
         *
         * @param string $password
         */
        public function setPassword($password)
        {
            $this->password_hash = Yii::$app->security->generatePasswordHash($password);
        }
    
        /**
         * Generates "remember me" authentication key
         */
        public function generateAuthKey()
        {
            $this->auth_key = Yii::$app->security->generateRandomString();
        }
    
        /**
         * Generates new password reset token
         */
        public function generatePasswordResetToken()
        {
            $this->password_reset_token = Yii::$app->security->generateRandomString() . '_' . time();
        }
    
        /**
         * Removes password reset token
         */
        public function removePasswordResetToken()
        {
            $this->password_reset_token = null;
        }
    }


    LoginForm.php
    <?php
    namespace common\models;
    
    use Yii;
    use yii\base\Model;
    
    /**
     * Login form
     */
    class LoginForm extends Model
    {
        public $username;
        public $password;
        public $rememberMe = true;
    
        private $_user;
    
    
        /**
         * @inheritdoc
         */
        public function rules()
        {
            return [
                // username and password are both required
                [['username', 'password'], 'required'],
                // rememberMe must be a boolean value
                ['rememberMe', 'boolean'],
                // password is validated by validatePassword()
                ['password', 'validatePassword'],
            ];
        }
    
        public function attributeLabels()
        {
            return [
                'username' => 'Логин',
                'password' => 'Пароль',
                'rememberMe' => 'Запомнить меня'
            ];
        }
    
        /**
         * Validates the password.
         * This method serves as the inline validation for password.
         *
         * @param string $attribute the attribute currently being validated
         * @param array $params the additional name-value pairs given in the rule
         */
        public function validatePassword($attribute, $params)
        {
            if (!$this->hasErrors()) {
                $user = $this->getUser();
                if (!$user || !$user->validatePassword($this->password)) {
                    $this->addError($attribute, 'Неверное имя пользователя или пароль.');
                }
            }
        }
    
        /**
         * Logs in a user using the provided username and password.
         *
         * @return bool whether the user is logged in successfully
         */
        public function login()
        {
            if ($this->validate()) {
                $user = $this->getUser();
                if($user->status === User::STATUS_ACTIVE)
                    return Yii::$app->user->login($this->getUser(), 60 * 60 * 24 * 365);
    
                if($user->status === User::STATUS_WAIT)
                    throw new \DomainException('Для завершения регистрации подтвердите адрес электронной почты. <br> Проверить свою электронную почту.');
    
            } else
                return false;
        }
    
        /**
         * Finds user by [[username]]
         *
         * @return User|null
         */
        protected function getUser()
        {
            if ($this->_user === null) {
                $this->_user = User::findByUsername($this->username);
            }
    
            return $this->_user;
        }
    }


    Контроллер
    public function actionLogin()
        {
            if (!Yii::$app->user->isGuest) {
                return $this->goHome();
            }
    
            $form = new LoginForm();
            if ($form->load(Yii::$app->request->post())) {
                try {
                    if($form->login())
                        return $this->goBack();
                } catch (\DomainException $e) {
                    Yii::$app->session->setFlash('error', $e->getMessage());
                }
            }
    
            return $this->render('login', [
                'model' => $form,
            ]);
        }
  • Как убрать автопереход под другого пользователя?

    @soy4er Автор вопроса
    Дмитрий, вот какой именно
    модель или контролер и какой, всего много)
    Мне бы понять в какую сторону копать
  • Как правильно настроить url rules YII2?

    @soy4er Автор вопроса
    Александр Вербицкий, ну я вроде как попробовал и префикс появляется только при опции prefix, а не routePrefix
    [
                        'class' => 'yii\web\GroupUrlRule',
                        'prefix' => 'profile',
                        'routePrefix' => 'profile',
                        'rules' => [
                            '<username>' => 'view',
                            '/profile/edit' => 'update',
                        ],
                    ],
  • Как сделать выборку похожих товаров в Yii2?

    @soy4er Автор вопроса
    vyachin, спасибо, сейчас попробую на yii реализовать данный запрос. Точно, делаю дополнительные sql запросы в основном и определяю кол-во записей в них.... как же я затупил....
  • Как сделать выборку похожих товаров в Yii2?

    @soy4er Автор вопроса
    Печально, кажись так и не смогу ничего придумать
  • Как сделать выборку похожих товаров в Yii2?

    @soy4er Автор вопроса
    Максим Тимофеев как правильно, по вашему, реализовать выборку подобных книг?

    Можно сделать проще выборку, как я показал выше в запросе. То есть отобрать книги в которых есть хотя бы 1 из жанров И хотя бы 1 из тегов. И просто рандомно выводить в слайдере по 8-10 штук. Но все равно интересно как решить данную задачу более правильно, тем более связи можно поменять. Это просто последняя деталь, что у меня не получилась))
  • Как правильно подключить уведомления от яндекс денег?

    @soy4er Автор вопроса
    Алексей, не приходит.
    Отправляет на http, но только без данных пользователя, я их и не запрашиваю.
  • Как правильно подключить уведомления от яндекс денег?

    @soy4er Автор вопроса
    slo_nik, доброе.
    У меня стоит плагин и загрузка проходит через другую функцию, но там по сути просто переписывание немного данных и так же $model->save

    Я понимаю, что не желательно, это пока чисто для проверки.

    Это весь код в контроллере, единственное там еще ключ записан и все.
    Смысл то в том, что яндекс туда даже ничего не отправляет.

    Думал, мб из за контроллера, так как это контроллер плагина. Но ставил прям в index и ссылку ставил на основной домен.
  • Как убрать из url модель при get запросе yii?

    @soy4er Автор вопроса
    slo_nik, не совсем, меня сейчас устраивает полностью сортировка listview, единственное убрать часть не нужных сортировок и сделать выпадающий список.
  • Как убрать из url модель при get запросе yii?

    @soy4er Автор вопроса
    slo_nik, я же показал, отдельно рендерится на туже страницу форма в которой сортировка и кол-во записей.
    Так же просто вставил для теста сортировку в listview
    'layout' => "{sorter}\n{summary}\n{items}\n{pager}",

    5bfba34ab4c31700342497.png
    Допустим ее использовать, но как настроить, как туда вывести сортировку со связанной таблицы и сделать ее выпадающим списком?
  • Как убрать из url модель при get запросе yii?

    @soy4er Автор вопроса
    slo_nik, что именно показать? Добавил в вопрос форму.
    Ну я еще думал сделать список:
    $dataProvider->sort->link('number_chapters');
    $dataProvider->sort->link('-number_chapters');

    И через js открывать закрывать его?
    Но как тогда сделать тоже самое с кол-вом записей на странице. Там тоже нужен get запрос "per-page=18"
  • Как связать 3 таблицы yii2?

    @soy4er Автор вопроса
    Arik, я могу хранить индикаторы, но это не очень удобно. Проще сделать связь, все загнать в 1 массив и просто его обработать как уже нужно будет.
  • Как вывести подборку похожих товаров?

    @soy4er Автор вопроса
    slo_nik, жаль конечно не дошло все еще до меня как вывести похожие книги, то есть не так, что если 1 жанр или тег совпадает то вывести, а нормально.
  • Как вывести подборку похожих товаров?

    @soy4er Автор вопроса
    slo_nik, да я косячный, только еще учусь и понял что вся моя структура в бд ужасна. Я переписываю сейчас под hasOne hasMany, то есть делаю 3 таблицу для связи Жанров и Книг.

    У меня просто в таблице книг хранился массив с id-шниками жанров. Ну короче, я за ночь тут посмотрел видосиков и понял, что я не оч))) Начал переделывать.

    Сейчас связь Жанров с Книгами hasMany to hasMany.