Пока делал предыдущий туториал - узнал, что вовсе необязательно создавать фасады вручную. Можно воспользоваться построением фасадов в реальном времени.
Пример с созданием класса-фасада
Допустим, мы имеем класс StringFilter, который лежит в директории /app/Helpers/Filters и имеет один метод - keepNumbersAndLettersOnly(), который удаляет из строки все символы кроме латинский букв и чисел:
1 2 3 4 5 6 7 8 9 10 11<?php namespace App\Helpers\Filters; class StringFilter { public function keepNumbersAndLettersOnly(string $str): string { return preg_replace('/[^A-Za-z0-9]+/u', '', $str); } }
Чтобы использовать этот метод без создания экземпляра класса вручную, мы можем создать для него фасад.
1 2 3 4 5 6 7 8 9 10 11 12 13<?php namespace App\Facades\Helpers\Filters; use Illuminate\Support\Facades\Facade; class StringFilter extends Facade { protected static function getFacadeAccessor() { return \App\Helpers\Filters\StringFilter::class; } }
И зарегистрировать alias в /config/app.php
, добавив к массиву с ключом alias следующую строку:
'StringFilter' => \App\Facades\Helpers\Filters\StringFilter::class,
Теперь по всему проекту мы можем обращаться к методу keepNumbersAndLettersOnly() через псевдоним фасада:
\StringFilter::keepNumbersAndLettersOnly('abc-=|,.123');
Либо импортировать пространство имен фасада:
1 2 3 4 5 6 7 8 9 10 11 12 13<?php namespace App\Http\Controllers; use App\Facades\Helpers\Filters\StringFilter; class TestController extends Controller { public function index() { return StringFilter::keepNumbersAndLettersOnly('abc-=|,.123'); } }
Пример создания фасада "на лету"
Повторим тоже самое, но без создания класса фасада (удалите его).
Всё что нужно сделать, это всего-лишь добавить в начало к импортируемому пространству имен требуемого класса приставку Facades\.
Таким образом мы сможем обращаться к обычным методам класса статическим способом, без создания экземпляра класса своими руками:
1 2 3 4 5 6 7 8 9 10 11 12 13<?php namespace App\Http\Controllers; use Facades\App\Helpers\Filters\StringFilter; class TestController extends Controller { public function index() { return StringFilter::keepNumbersAndLettersOnly('abc-=|,.123'); } }
Как за такую магию не любить Laravel?
Добавление псевдонима для фасада в реальном времени
Давайте пойдем ещё дальше и избавимся от необходимости каждый раз импортировать пространство имен с приставкой Facades/.
Для этого, таким же образом, необходимо в файле /config/app.php в массив с ключом alias добавить одну строку:
'StringFilter' => Facades\App\Helpers\Filters\StringFilter::class,
Теперь мы можем просто вызывать методы по псевдониму нашего автоматического создаваемого фасада таким образом:
1 2 3 4 5 6 7 8 9 10 11<?php namespace App\Http\Controllers; class TestController extends Controller { public function index() { return \StringFilter::keepNumbersAndLettersOnly('abc-=|,.123'); } }
Понравилось прочитанное?
Дайте мне «пять», кликнув раз, или же поаплодируйте быстрыми нажатиями, чтобы показать, насколько вам понравился материал.
Комментарии