Версия для печати | оригинал записи

Создаём свою собственную Blade команду

ash — Log-ово Хозяина

09 апреля 2019 19:07
Создаём свою собственную Blade команду
[attachid=599614]

Создаём свою собственную Blade команду: На примере br2nl в Laravel

Недавно у меня была задача с полем textarea — сохранять данные с <br /> для перевода строки, но не показывать их в форме.
Для подобного преобразования есть php функция nl2br, но нет команды делающей обратное — br2nl.
Вместо этого конечно можно просто использовать свой метод, а вот как его добавить в Blade? А я покажу!

Для начала, нашёл «неофициальный» метод в комментариях на сайте PHP.net:
Цитирую (PHP)
function br2nl($string)
{
    return preg_replace('/\<br(\s*)?\/?\>/i', "\n", $string);
}

Хорошо, но как нам использовать это в шаблонах для обработки значений textarea? Нужно, что-то вроде этого:
Цитирую (HTML)
<textarea>{{ br2nl($post->post_text) }}</textarea>

Конечно, мы можем зарегистрировать эту функцию как помощник (helper), добавить ее в PSR-4 в composer.json и использовать так.
Но, поскольку она будет использоваться только в шаблонах, я решил создать отдельную команду Blade, поэтому она будет работать так:
Цитирую (HTML)
<textarea>@br2nl($post->post_text)</textarea>

Для этого нам нужно зарегистрировать её в app/Providers/AppServiceProvider.php в методе boot():
Цитирую (PHP)
public function boot()
{
    Blade::directive('br2nl', function ($string) {
        return "<?php echo preg_replace('/\<br(\s*)?\/?\>/i', \"\n\", $string); ?>";
    });
}

Обратите внимание, что мы возвращаем не просто обработанную строку, нам нужно вернуть синтаксис PHP, выводящий её.

В завершении, почистим кэш шаблонов:
Цитирую (HTML)
php artisan view:clear

Вот и все! Нигде и ничего больше менять не нужно. Вот так просто добавляются команды в Blade.

Дополнительную информацию вы можете найти в официальной документации — см. раздел Extending Blade.


Автор: Povilas Korop
Перевод: Demiurge Ash


Комменты: 0


Demiart © 2019