在Laravel创建自定义刀片指令
#php #laravel #blade #directive

Laravel Blade很棒,真的很棒。最伟大的事情之一是添加自定义指令的能力。
我最近偶然发现的一种用例是用货币格式化钱。可以肯定的是,我可以创建一个辅助功能并调用它。
示例

    if (! function_exists('formatMoney')) {
    function formatMoney(string|int|float $amount) {
        if (is_string($amount)) {
            $amount = floatval($amount);
        }

        $settings = app(GeneralSettings::class);

        $formatter = new NumberFormatter(config('app.currency_locale', 'en_US'), NumberFormatter::CURRENCY);

        return $formatter->formatCurrency($amount, $settings->app_currency);

    }

,然后我们可以像以下视图中使用它

...
{{ formatMoney($invoice->total) }}
...

我们很高兴去,但是在这种情况下,让我们使用刀片的力量并创建自己的指令。
为此,请打开AppServiceProvider.php并前往boot方法。
在引导方法中,我们将编写自己的自定义指令。

Blade::directive($name, function ($expression) {
    some code here;
});

在我们的上下文中,我们将使用上面的代码,该代码在辅助类中定义,以便我们可以格式化资金。
刀片指令将命名为money

Blade::directive('money', function ($expression) {
    return "<?php echo app('App\Utils\Helpers')->formatMoney($expression); ?>";
});

所以这是最终代码,在视图文件中,我们可以称其为以下内容

@money('somevalue')

如果您想拥有一些格式化器或某些条件,则此处的收入是在返回值中。让我们举一个例子。
Laravel具有@auth@guest指令。
但是,让我们自己做一些事情。假设我们的应用程序中有客户,因此我们将制作刀片指令,以检查身份验证的用户是否是客户,并根据该条件显示一些代码。
通常,这是我们要做的:

@if(auth()->user()->isCustomer)
//some code here
@endif

但是,如果我们在观点中到处都有那件代码,那将很难。想象一下,如果我们会添加另一个条件,例如检查客户是否有活动订阅。
是的,你明白了。
在这种情况下,我们可以利用刀片定制指令。
新指令的使用将如下:

@customer
//somecode here
@endcustomer

您可以在这里看到,我们有两个指令,因此我们将在我们的AppServiceProvider.php中定义两个函数

Blade::directive('customer', function ($expression) {
    return "<?php if(auth()->check() && auth()->user()->isCustomer): ?>";
});

Blade::directive('endcustomer', function ($expression) {
    return "<?php endif; ?>";
});

第一个是测试条件并为您的代码逻辑打开结肠,另一个将关闭IF语句。

在本简短的教程中,我们看到了如何编写自定义刀片指令。我希望您了解如何创建和使用它们是有见地的。
如果有任何问题或任何建议,请随时在Twitter

上与我联系