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

kup*_*up_ 6 php laravel laravel-blade

我想cknow/laravel-money在我的应用程序的几乎每个页面中都使用这个包。我认为一个整洁的方法是在父刀片中导入类。但是,子模板似乎无权访问导入的类。

我试过使用标准<?php ?>标签和@php @endphp指令。

应用程序.blade.php

@php
use Cknow\Money\Money; 
@endphp
Run Code Online (Sandbox Code Playgroud)
    <title>{{ config('app.name') }}</title>

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

show.blade.php

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

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

这抛出。

“找不到‘钱’类。”

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

小智 8

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

\Cknow\Money\Money::GBP($item->price);
Run Code Online (Sandbox Code Playgroud)

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


Ash*_*own 5

使用视图共享类并不是Laravel的真正做法。通常,所有逻辑都应位于控制器内,并将数据传递到视图中。

话虽如此,您可以手动将类传递到每个视图中,也可以参考文档,因为 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)
Run Code Online (Sandbox Code Playgroud)