Почему Intelephense в Laravel промежуточном программном обеспечении не распознает функцию из моей модели User? - PullRequest
0 голосов
/ 16 января 2020

Я сделал промежуточное программное обеспечение, которое отвечает за проверку разрешений, которые есть у пользователя. Я реализовал функцию hasPermission в моей модели User. Но когда я пытаюсь использовать его через auth()->user, я получаю следующую ошибку, почему это происходит?

enter image description here

Я реализовал этот метод в своем Модель пользователя

public function hasPermission($permission)
{
    return in_array($this->permissions(), $permission);
}

А это промежуточное ПО

<?php

namespace App\Http\Middleware;

use Closure;

class VerifyPermission
{
    public function handle($request, Closure $next, $permission)
    {
        if (auth()->check() && auth()->user()->hasPermission($permission)) {
            return $next($request);
        }
        abort(401, 'Unauthorized');
    }
}

1 Ответ

0 голосов
/ 16 января 2020

Это потому, что метод user() имеет тип возврата \Illuminate\Contracts\Auth\Authenticatable|null, который представляет собой интерфейс, который реализует ваш пользовательский класс. Это потому, что он может возвращать разные модели в зависимости от используемой вами защиты, но все они должны реализовывать Authenticatable.

. Я не знаю простого способа изменить это глобально, но вы могли бы сохранить пользователя в переменной и добавьте блок phpDo c:

/** @var \App\User */
$user = auth()->user();

Это должно быть получено intelephense и показать правильные методы.

...