Есть ли способ импортировать классы PHP в шаблон Blade и использовать их в дочерних шаблонах?

Я хочу использовать пакет cknow/laravel-money практически на каждой странице своего приложения. Я подумал, что аккуратным способом сделать это будет импорт класса в родительский блейд. Однако дочерние шаблоны, похоже, не имеют доступа к импортированному классу.

Я пытался использовать стандартные теги <?php ?> и директивы @php @endphp.

app.blade.php

@php
use Cknow\Money\Money; 
@endphp

    <title>{{ config('app.name') }}</title>

    </head>
    <body>
        @include('inc.navbar')
        @include('inc.flashmessages')
        <div class = "container">
            @yield('content')
        </div>
    </body>
</html>

show.blade.php

<div class = "card-footer text-muted">
    {{ Money::GBP($item->price) }}
</div>

Это бросает.

"Class 'Money' not found."

Принимая во внимание, что включение того же оператора use в дочерний класс работает, как и ожидалось.

🤔 А знаете ли вы, что...
PHP поддерживает расширения для работы с множеством сторонних сервисов и API.


7
4 592
2

Ответы:

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

\Cknow\Money\Money::GBP($item->price);

Если вы просто хотите использовать Money вместо полного пути, вы можете создать псевдоним из файла config/app.php.


Решено

Совместное использование классов с представлениями на самом деле не является Ларавель путь для этого. Как правило, вся логика должна находиться внутри контроллера, а данные должны передаваться в представление.

При этом вы можете передать класс в каждое представление вручную или обратиться к документации, поскольку в Laravel Money встроены расширения Blade. Возможно, это обеспечивает всю необходимую вам функциональность?

Согласно Документы Laravel Money

@currency('USD')
@money(500) // To use default currency present in `config/money.php`
@money(500, 'USD')

// Aggregation
@money_min(@money(100, 'USD'), @money(200, 'USD'), @money(300, 'USD')) // Money::USD(100)
@money_max(@money(100, 'USD'), @money(200, 'USD'), @money(300, 'USD')) // Money::USD(300)
@money_avg(@money(100, 'USD'), @money(200, 'USD'), @money(300, 'USD')) // Money::USD(200)
@money_sum(@money(100, 'USD'), @money(200, 'USD'), @money(300, 'USD')) // Money::USD(700)

// Parsers
@money_parse('$5.00') // Money::USD(100)
@money_parse_by_bitcoin("\xC9\x830.41") // Money::XBT(41000000)
@money_parse_by_decimal('1.00', 'USD') // Money::USD(100)
@money_parse_by_intl('$1.00') // Money::USD(100)
@money_parse_by_intl_localized_decimal('1.00', 'USD') // Money::USD(100)