Как я могу передать переменную в директиву при расширении Laravel Blade? - PullRequest
0 голосов
/ 19 февраля 2020

При создании пользовательской директивы Laravel Blade, как передать переменную? В настоящий момент переменная, переданная в директиву @svg (), не анализируется и обрабатывается как строка:

Представление блейда:

@svg($svg->url, 'fill-white')

AppServiceProvider. php

    Blade::directive('svg', function ($arguments) {

        list($path, $class) = array_pad(explode(',', trim($arguments, "() ")), 2, '');
        $path = trim($path, "' ");
        $class = trim($class, "' ");


            dd($path); // Outputs $svg->url

           // Required output = path/to/filename.svg

        });

ОБНОВЛЕННЫЙ КОД (на основе ответа Андрея Даскалу):

Шаблон блейда:

 @php($svg = 'test.svg')
 @svg($svg, 'fill-white')

AppServiceProvider:

       Blade::directive('svg', function ($arguments) {
            eval("\$params = [$arguments];");
           // Produces 'undefined variable $svg' error

            list($path, $class) = $params;
});

1 Ответ

1 голос
/ 19 февраля 2020

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

eval("\$params = [$arguments];");
list($param1, $param2, $param3) = $params;

Таким образом, вы можете вызвать @mydirective ($ param1, $ param2, $ param3) и замыкание будет обрабатывать разбиение параметров отдельно от строк $ arguments.

...