Задать вопрос

Как правильно реализовать метод?

Есть код во вреймворке. Метода find() не было, и система ругалась, я его добавил, но теперь ошибка: Undefined variable: user ругается на строку return new static($user); пробовал просто return $user; то же самое.
1) Как всё же отдать данные всех юзеров стразу
2) Как же тогда работает точно такой же return в методе ниже findIdentityByAccessToken

class User extends \yii\base\Object implements \yii\web\IdentityInterface
{
    public $id;
    public $username;
    public $password;
    public $authKey;
    public $accessToken;

    private static $users = [
        '100' => [
            'id' => '100',
            'username' => 'admin',
            'password' => 'admin',
            'authKey' => 'test100key',
            'accessToken' => '100-token',
        ],
        '101' => [
            'id' => '101',
            'username' => 'demo',
            'password' => 'demo',
            'authKey' => 'test101key',
            'accessToken' => '101-token',
        ],
    ];

    public static function find()
    {
        return new static($user);
    }

    public static function findIdentityByAccessToken($token, $type = null)
    {
        foreach (self::$users as $user) {
            if ($user['accessToken'] === $token) {
                return new static($user);
            }
        }
        return null;
    }
....
  • Вопрос задан
  • 294 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 2
@vyrkmod
Пишу на php. И не стыдно.
Рекомендую маны почитать. И не надо путать пользователя-в-базе (ActiveRecord) и компонент идентификации (IdentityInterface), хотя оба класса и называются User.
Ответ написан
Комментировать
public static function find()
    {
        return new static($user);
    }

Что здесь представляет из себя переменная $user?
в методе findIdentityByAccessToken у вас переменная $user определена - вот он и не ругается.

И ругался он не на отсутствие find() метода, а на отсутствие других методов (см. интерфейс \yii\web\IdentityInterface):
public static function findIdentity($id); //Получение пользователя по ID (сделайте на подобии вашего метода с токеном)
public static function findIdentityByAccessToken($token, $type = null); //Получение пользователя по его токену (вы его уже сделали)
public function getId(); //Получить id текущего пользователя (просто return $this-id)
public function getAuthKey(); //Получить auth key
public function validateAuthKey($authKey); //Удостовериться, что полученный authkey нормальный.

Некоторые методы у вас уже есть. Создайте все эти методы с такими же параметрами. Если метод не нужен, то оставьте его пустым (так даже говорится в документации, ссылки на которую вам дал vyrkmod).

Удачи!
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы