从(Laravel 8)Blade 模板文件调用函数

Posted

技术标签:

【中文标题】从(Laravel 8)Blade 模板文件调用函数【英文标题】:Calling function from (Laravel 8) Blade template file 【发布时间】:2021-10-31 05:05:23 【问题描述】:

我在 app/View/Components 中有一个名为 OrderBox.php 的刀片组件。 它有几个公共属性,我可以从 orderbox.blade.php 模板文件中访问。

            <x-orderbox
                    :id="$id"
                    ....
            ></x-orderbox>

但是,OrderBox.php 组件文件中有一个公共函数getShortTextByStatus($statusCode) 当我在 orderbox.blade.php 模板中调用这个函数时

 $getShortTextByStatus('EDIT') 

我得到 未定义的变量:shortTextByStatus 错误

我关注了这个:https://laravel.com/docs/8.x/blade#component-methods 但一切看起来都一样,我错过了什么?

编辑:

如果我删除 $ 我得到 Call to undefined function getShortTextByStatus() 错误

 getShortTextByStatus('EDIT') 

OrderBox.php

class OrderBox extends Component


    public $id;
    ....

    public function __construct()
    
    //
    

    public function render()
    
        return view('components.orderbox');
    

    public function getShortTextByStatus($statusCode)
    
       return 'TEST';
    


编辑 2:

我注意到 x-orderbox 实际上应该是 x-order-box

<x-order-box
    :id="$id"
     ....
></x-order-box>

这样, $getShortTextByStatus("EDIT") 就可以了!

B U T

不传递属性,如 :id="$id" 或

something="static" 

所以公开的$id;或 public $something 将是空的....

【问题讨论】:

你能分享OrderBox.php吗? @WahyuKristianto - 请查看更新后的问题 @GJasonSharma - 我确实从内部调用它,我突出显示了文本的那部分 您是否尝试将其重命名为以get 开头的?可能会混淆 Laravel。只是猜测 要使用:id 传递$id,您必须在构造函数中传递它:public function __construct($id) 并使用$this-&gt;id = id; 设置它 【参考方案1】:

所以我在这里犯了几个错误

首先,如果组件名称是OrderBox而不是

标签应该是

<x-order-box></x-order-box>

然后,如果您想将数据传递给您需要的组件(OrdeBox) 将属性添加到构造函数 - 特别感谢 @gert-b (Gert B) 来自评论区

class OrderBox extends Component


    public $id;
    public $otherId;
    ....

    public function __construct($id, $otherId)
    
        $this->id = $id;
        $this->otherId;
    

    ...
    ...

出于某种原因,我认为只有强制属性才能进入构造函数。

而且别忘了,组件类中的属性是camelCase 像公共 $otherId;但在模板中,是kebab case:other-id

<x-order-box
    id="1"
    :other-id="$someVariable"
></x-order-box>

【讨论】:

以上是关于从(Laravel 8)Blade 模板文件调用函数的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.1 Blade模板引擎

为 Blade 模板引擎添加新文件扩展名

正确使用 Blade(Laravel),在自己的文件中出现标题问题

Laravel - Blade:@include 一个带有自动“文件名注释”的模板

如何在 laravel 4 的 Blade.php 模板中使用静态函数?

如何将 Laravel Blade 中的第一个字母大写