从(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->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 模板文件调用函数的主要内容,如果未能解决你的问题,请参考以下文章
正确使用 Blade(Laravel),在自己的文件中出现标题问题
Laravel - Blade:@include 一个带有自动“文件名注释”的模板