DevGang
Авторизоваться

Создание пользовательских директив Blade в Laravel

Laravel Blade потрясающий, действительно потрясающий. Одна из замечательных особенностей — это возможность добавлять собственные директивы.

Один из вариантов использования, с которым я недавно наткнулся, — это форматирование денег с помощью валюты. Конечно, я могу создать вспомогательную функцию и вызвать ее.

Пример:

    if (! function_exists('formatMoney')) {
    function formatMoney(string|int|float $amount) {
        if (is_string($amount)) {
            $amount = floatval($amount);
        }

        $settings = app(GeneralSettings::class);

        $formatter = new NumberFormatter(config('app.currency_locale', 'en_US'), NumberFormatter::CURRENCY);

        return $formatter->formatCurrency($amount, $settings->app_currency);

    }

И тогда мы могли бы использовать его в наших представлениях, как показано ниже.

...
{{ formatMoney($invoice->total) }}
...

И мы готовы идти дальше, но в этом контексте давайте воспользуемся силой Blade и создадим нашу собственную директиву.

Для этого откройте AppServiceProvider.php и перейдите к методу загрузки.

Внутри метода загрузки мы напишем собственную директиву.

Blade::directive($name, function ($expression) {
    some code here;
});

В нашем контексте мы будем использовать приведенный выше код, определенный во вспомогательном классе, чтобы можно было форматировать деньги.

Директива Blade будет называться Money

Blade::directive('money', function ($expression) {
    return "<?php echo app('App\Utils\Helpers')->formatMoney($expression); ?>";
});

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

@money('somevalue')

Суть здесь в возвращаемом значении: если вы хотите иметь какие-то средства форматирования или какие-то условия, возвращаемое значение должно быть PHP-кодом. Давайте возьмем другой пример.

В Laravel есть директивы @auth и @guest.

Но давайте что-нибудь сделаем сами. Допустим, в нашем приложении есть клиенты, поэтому мы создадим блейд-директиву, которая проверяет, является ли аутентифицированный пользователь клиентом или нет, и покажем некоторый код на основе этого условия.

Обычно мы делаем следующее:

@if(auth()->user()->isCustomer)
//some code here
@endif

Но это было бы сложно, если бы этот фрагмент кода был повсюду в наших представлениях. Представьте, что мы добавим еще одно условие, например, проверку наличия у клиента активной подписки.

Так что да, вы поняли суть.

В этой ситуации мы могли бы использовать пользовательские директивы блейда.

Использование новой директивы будет следующим:

@customer
//somecode here
@endcustomer

Как вы можете видеть здесь, у нас есть две директивы, поэтому мы определим две функции в нашем AppServiceProvider.php.

Blade::directive('customer', function ($expression) {
    return "<?php if(auth()->check() && auth()->user()->isCustomer): ?>";
});

Blade::directive('endcustomer', function ($expression) {
    return "<?php endif; ?>";
});

Первый — проверить условие и открыть двоеточие для логики вашего кода, а второй — закрыть оператор if.

В этом коротком уроке мы увидели, как можно писать собственные директивы блейда. Надеюсь, вам было полезно понять, как их создавать и использовать.

Источник:

#PHP
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу