Шаблонизатор Laravel Blade предоставляет нам возможность отделять php от html кода в шаблонах проектов благодаря использованию предопределенных директив - специальных вставок в шаблоны проекта, которые заменяют php код.
Если базового набора предопределенных директив нам не достаточно, то можно написать любые свои директивы.
Чтобы стало понятнее все вышеописанное рассмотрим следующий пример:
Допустим наш проект работает с большими числами (миллионы, миллиарды и тд) и чтобы не загромождать экран лишними нолями и для удобства отображения нужно сделать возможность автозамены нулей на суффиксы "млн", "млрд", и т.д. Нам нужно создать в шаблоне новую директиву @price($number), которая будет проверять является ли переменная $number числом и автоматически заменять нули в этом числе на суффиксы.
Для реализации этой задачи нам нужно перейти в сервис-провайдер и прописать там новую директиву Blade в функцию boot():
//файл /app/Providers/AppServiceProvider.php public function boot() { Blade::directive('price', function ($expression) { return "<?php echo $expression; ?>"; }); }
 
Чтобы конструкция работала нужно не забыть прописать синоним для Blade в начале файла сервис провайдера в список синонимов.
//файл /app/Providers/AppServiceProvider.php use Illuminate\Support\Facades\Blade;
 
Данная запись позволит нам выводить нашу переменную $number в шаблоне с помощью директивы @price. Т.е. если в любом файле .blade мы пропишем @price($number) то получим просто значение переменной $number. Но перед тем как это начнет работать нужно почистить кэш. Чтобы любые изменения в сервис-провайдере Laravel вступили в силу нужно чистить кэш вьюеров.
//вызывается из консоли (SSH) php artisan view:clear //удаляет кэш вьюеров
 
Теперь наш проект умеет понимать что такое директива @price() в блейдах и выполняет по этой директиве заданную нами логику, т.е. просто выводит переменную через echo. Осталось только прописать логику функционала и вставить ее в эту директиву.
логика функционала выглядеть будет так:
if (is_numeric($number)) { if ($number/1000000000000 >= 1 || $number/1000000000000 <= -1) { echo $number/1000000000000.' трлн'; } elseif ($number/1000000000 >= 1 || $number/1000000000 <= -1) { echo $number/1000000000.' млрд'; } elseif ($number/1000000 >= 1 || $number/1000000 <= -1) { echo $number/1000000.' млн'; } else { echo $number; } } else { echo $number; }
Чтобы вставить логику функционала в директиву мы вставляем полученный код в нашу заранее подготовленную функцию в сервис-провайдере.
//файл /app/Providers/AppServiceProvider.php public function boot() { Blade::directive('price', function ($expression) { return "<?php if (is_numeric($expression)) { if ($expression/1000000000000 >= 1 || $expression/1000000000000 <= -1) { echo $expression/1000000000000.' трлн'; } elseif ($expression/1000000000 >= 1 || $expression/1000000000 <= -1) { echo $expression/1000000000.' млрд'; } elseif ($expression/1000000 >= 1 || $expression/1000000 <= -1) { echo $expression/1000000.' млн'; } else { echo $expression; } } else { echo $expression; } ?>"; }); }
 
Осталось не забыть почистить кэш вьюеров. Как это сделать - было уже описано ранее. Теперь наша директива @price($number) будет преобразовывать число в нужный нам формат с нужным нам суффиксом.