Я хочу использовать пакет 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.
Вы можете написать его, используя полный путь от дочернего шаблона.
\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)