You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel组件中使用自定义Blade指令@rupiah?

解决方案

问题根源在于你混淆了Blade指令和全局辅助函数的区别:你注册的@rupiah是Blade模板指令,并非可直接调用的PHP函数;同时组件的:value属性绑定是PHP表达式环境,无法直接解析Blade指令。

下面提供两种可行的解决方式:


方式一:将Blade指令转为全局辅助函数

这是最通用的方案,能让你在Blade模板、组件属性等任何场景下直接调用rupiah()函数:

  1. 创建辅助函数文件
    在app/Helpers目录下新建CurrencyHelper.php(没有Helpers目录就手动创建),写入你的金额格式化逻辑:
<?php

if (!function_exists('rupiah')) {
    function rupiah($amount)
    {
        // 这里替换成你@rupiah指令里的原有逻辑
        return 'Rp ' . number_format($amount, 0, ',', '.');
    }
}
  1. 配置自动加载
    打开项目根目录的composer.json,在autoload的files数组中添加这个文件路径:
"autoload": {
    "files": [
        "app/Helpers/CurrencyHelper.php"
    ],
    // 保留原有其他自动加载配置
}
  1. 刷新自动加载缓存
    在终端执行命令:
composer dump-autoload

之后就可以正常使用以下写法:

<x-form.input name="NLTRX" label="Nilai Transaksi" disabled="true" value="{{ rupiah($retailPending['NLTRX']) }}" />

或者:

<x-form.input name="NLTRX" label="Nilai Transaksi" disabled="true" :value="rupiah($retailPending['NLTRX'])" />

方式二:在组件内部使用Blade指令

如果你不想新增辅助函数,可以修改x-form.input组件的视图文件,在组件内部用@rupiah处理传入的数值:

  1. 找到组件视图文件
    一般在resources/views/components/form/input.blade.php,修改输入框的value属性:
<div class="form-group">
    <label for="{{ $name }}">{{ $label }}</label>
    <input 
        type="text" 
        name="{{ $name }}" 
        id="{{ $name }}"
        {{ $disabled ? 'disabled' : '' }}
        value="@isset($value) @rupiah($value) @endisset"
    />
</div>
  1. 调用组件时传入原始数值
    不需要再在属性里处理,直接传未格式化的数值即可:
<x-form.input name="NLTRX" label="Nilai Transaksi" disabled="true" value="{{ $retailPending['NLTRX'] }}" />

内容的提问来源于stack exchange,提问作者Alvin FZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 17:02:37