Laravel 5.7 Gate :: allow-stati c метод Illuminate \ Auth \ Access \ Gate :: allow () не должен вызываться статически - PullRequest
0 голосов
/ 08 января 2020

Я получил эту ошибку в Laravel 5.7 при использовании Gate :: allow в моем классе formRequest.

Я использовал это: use Illuminate\Auth\Access\Gate;, и оно не сработало,

поэтому я заменил его следующим: use Illuminate\Support\Facades\Gate, и это сработало.

Мне действительно нужно знать, почему первое не сработало и в чем разница между ними. Я пытался искать вещи, но мне нужно более прямое и краткое объяснение. Любая помощь или указатель будет высоко оценен.

1 Ответ

1 голос
/ 08 января 2020

В приложении Laravel фасад - это класс, который обеспечивает доступ к объекту из контейнера. Техника, которая делает эту работу, находится в классе Facade. Фасады Laravel и любые пользовательские фасады, которые вы создаете, расширят базовый класс Illuminate \ Support \ Facades \ Facade.

Базовый класс Facade использует __callStati c () magi c -метод, чтобы отложить вызовы с вашего фасада на объект, разрешенный из контейнера. В приведенном ниже примере выполняется вызов кеш-системы Laravel. Взглянув на этот код, можно предположить, что метод get stati c вызывается для класса Cache:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Cache;

class UserController extends Controller
{
    /**
     * Show the profile for the given user.
     *
     * @param  int  $id
     * @return Response
     */
    public function showProfile($id)
    {
        $user = Cache::get('user:'.$id);

        return view('profile', ['user' => $user]);
    }
}

Обратите внимание, что в верхней части файла мы находимся «импортирование» фасада кеша. Этот фасад служит прокси для доступа к базовой реализации интерфейса Illuminate \ Contracts \ Cache \ Factory. Все вызовы, которые мы делаем с помощью фасада, будут переданы в базовый экземпляр службы кэширования Laravel.

Если мы посмотрим на этот класс Illuminate \ Support \ Facades \ Cache, вы увидите, что есть no stati c метод get:

class Cache extends Facade {
    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor() { return 'cache'; } }

Вместо этого фасад Cache расширяет базовый класс Facade и определяет метод getFacadeAccessor (). Задача этого метода - вернуть имя привязки контейнера службы. Когда пользователь ссылается на любой статический метод на фасаде Cache, Laravel разрешает привязку кеша из контейнера службы и запускает запрошенный метод (в данном случае get) для этого объекта.

Docs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...