有没有办法将PHP类导入刀片模板并在子模板中使用它们?

时间:2019-01-27 22:34:39

标签: php laravel laravel-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>

抛出。

  

“未找到“货币”类。”

在子类中包含相同的use语句的工作符合预期。

2 个答案:

答案 0 :(得分:1)

您可以使用子模板的完整路径编写它。

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

如果只想使用Money而不是完整路径,则可以从config/app.php文件创建别名。

答案 1 :(得分:0)

使用视图共享类并不是执行此操作的 Laravel方法。通常,所有逻辑都应在控制器内,并将数据传递到视图中。

话虽如此,您可以将类手动传递到每个视图中,也可以参考文档,因为Laravel Money内置了Blade扩展。也许这提供了您需要的所有功能?

按照Laravel Money docs

@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)