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