@romicohen
Системный Архитектор

VSC(intelephense) подчеркивает красненьким «Expected type 'yii\web\IdentityInterface'. Found 'yii\db\ActiveRecord|null'» — как убрать?

Стандартная ситуация: модель User в ней метод

public static function findByUsername($username)
    {
        return static::find()
            ->where(['username' => $username])
            ->orWhere(['email' => $username])
            ->one();
    }


возвращает ActiveRecord. И это работает.

Но VSC в лице intelephense это не нравится:

"Expected type 'yii\web\IdentityInterface'. Found 'yii\db\ActiveRecord|null'"


и суть ее претнзий в целом понятна, ибо инстранс User одновременно и то и другое :-)

Но как это разрулить, чтобы красненькое не раздражало? :)

Спасибо.
  • Вопрос задан
  • 39 просмотров
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
попробуйте строго вернуть тип и/или указать в phpdoc
/**
 * @return IdentityInterface
 */
public static function findByUsername($usernam): IdentityInterface


для некоторых вредных IDE приходится делать так
public static function findByUsername($username)
    {
        $ebobo = static::find()
            ->where(['username' => $username])
            ->orWhere(['email' => $username])
            ->one();
        if($ebobo instanceof IdentityInterface){
            return $ebobo;
        }
       throw new \yii\web\NotFoundHttpException('The user not exist.');
    }

так как ->one() может вернуть null, а это явно не IdentityInterface
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы