MyTetra Share
Делитесь знаниями!
Соответствие фасадов и классов в Laravel 5.5
29.03.2019
15:02
Автор: xintrea
Текстовые метки: laravel, класс, фасад, таблица, соответствие, откуда берется, API
Раздел: Компьютер - Программирование - Язык PHP - Laravel

Как подключается фасад в код пользовательского класса


Часто начинающие программисты Laravel не могут понять, каким образом происходит подключение класса фасада. В примерах и в рабочем коде можно просто использовать фасад, например так:



Auth::routes();



и при этом нигде явно не подключается никакого пространства имен, в котором существовал бы класс Auth. Откуда тогда этот класс берется?


Все дело в настройках текущего Web-приложения. Если заглянуть в файл /config/app.php, то в настройках приложения можно обнаружить список с именем aliases. Выглядит он вот так:



'aliases' => [


'App' => Illuminate\Support\Facades\App::class,

'Artisan' => Illuminate\Support\Facades\Artisan::class,

'Auth' => Illuminate\Support\Facades\Auth::class,

...

],



Все классы, которые перечислены в этом списке, регистрируются при старте обработки HTTP-запроса и существуют все время выполнения пользовательского кода. Поэтому нет необходимости при работе с фасадом подключать пространство имен для доступа к коду класса фасада - это будет сделано автоматически на этапе инициализации обработки HTTP-запроса.


Для справки следует знать, что не все классы фасадов располагаются по пути



Illuminate\Support\Facades



Многие компоненты имеют различные свои фасады, и такие фасады размещаются по другим путям. Например, с некоторых пор в поставке Illiminate нет фасадов для работы с формами и HTML. Вместо них используются фасады из поставки Collective, лежащие в каталоге



Collective\Html



А сами фасады расположены так:



'Form' => Collective\Html\FormFacade::class,

'Html' => Collective\Html\HtmlFacade::class,



Где искать классы фасадов


В Laravel 5.5 файлы классов фасадов расположены по следующему пути:



/vendor/laravel/framework/src/Illuminate/Support/Facades/...



Если нужно понять, что делает тот или иной метод, вначале нужно посмотреть, есть ли его реализация в самом классе фасада. И только после этого надо искать, какой класс внутри себя фасад динамически подключает.



Таблица соответствия


Так как структура Laravel такова, что невозможно быстро понять по коду фасада какой класс он реально представляет и какие методы в нем реализованы (из-за использования магического метода PHP __staticCall() для вызова несуществующих методов), в документации Laravel есть таблица соответствия. Актуальная версия этой таблицы находится в разделе Contracts -> Contract Reference:



https://laravel.com/docs/master/contracts#contract-reference



В таблице перечислены все фасады и соответствующие им классы. Это полезный инструмент для быстрого начала работы с документацией по API, находя реальные классы от корня пространства имен. Также указаны текстовые ключи привязок в сервис-контейнере (см. третий столбец).




Фасад

Класс

Привязка в сервис-контейнере

App

Illuminate\Foundation\Application

app

Artisan

5.3, 5.2 и 5.1 Illuminate\Contracts\Console\Kernel
5.0 Illuminate\Console\Application

artisan

Auth

Illuminate\Auth\AuthManager

auth

Auth (экземпляр)

Illuminate\Auth\Guard только для 5.1 и ранее

Blade

Illuminate\View\Compilers\BladeCompiler

blade.compiler

Bus

Illuminate\Contracts\Bus\Dispatcher

Cache

5.3, 5.2 и 5.1 Illuminate\Cache\Repository
5.0 Illuminate\Cache\CacheManager

cache

Config

Illuminate\Config\Repository

config

Cookie

Illuminate\Cookie\CookieJar

cookie

Crypt

Illuminate\Encryption\Encrypter

encrypter

DB

Illuminate\Database\DatabaseManager

db

DB (экземпляр)

Illuminate\Database\Connection

Event

Illuminate\Events\Dispatcher

events

File

Illuminate\Filesystem\Filesystem

files

Form

5.0 Illuminate\Html\FormBuilder

form

Gate

Illuminate\Contracts\Auth\Access\Gate

Hash

Illuminate\Contracts\Hashing\Hasher

hash

Input

Illuminate\Http\Request только для 5.1 и ранее

request

Lang

Illuminate\Translation\Translator

translator

Log

Illuminate\Log\Writer

log

Mail

Illuminate\Mail\Mailer

mailer

Notification

Illuminate\Notifications\ChannelManager для 5.3 и выше

Password

5.3, 5.2 и 5.1 Illuminate\Auth\Passwords\PasswordBroker
5.0 Illuminate\Auth\Reminders\PasswordBroker

auth.password
auth.reminder

Queue

Illuminate\Queue\QueueManager

queue

Queue (экземпляр)

Illuminate\Queue\QueueInterface для 5.1 и ранее
Illuminate\Contracts\Queue\Queue для 5.2 и выше


queue

Queue (базовый класс)

Illuminate\Queue\Queue

Redirect

Illuminate\Routing\Redirector

redirect

Redis

Illuminate\Redis\Database

redis

Request

Illuminate\Http\Request

request

Response

Illuminate\Contracts\Routing\ResponseFactory

Route

Illuminate\Routing\Router

router

Schema

Illuminate\Database\Schema\Blueprint

Session

Illuminate\Session\SessionManager

session

Session (экземпляр)

Illuminate\Session\Store

Storage

Illuminate\Contracts\Filesystem\Factory

filesystem

URL

Illuminate\Routing\UrlGenerator

url

Validator

Illuminate\Validation\Factory

validator

Validator (экземпляр)

Illuminate\Validation\Validator

View

Illuminate\View\Factory

view

View (экземпляр)

Illuminate\View\View



Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования