【问题标题】:Laravel slot variable name has the same name as another variableLaravel 槽变量名与另一个变量同名
【发布时间】:2021-11-26 13:29:54
【问题描述】:

我路过

<x-slot name="customLayout"> custom content goes here </x-slot>

所以在 Laravel 刀片中我可以使用以下方式打印它:

{{ $customLayout }}

但是,在组件刀片中,我有另一个变量,它具有相同的变量名称 $customLayout,它是一个字符串。

我不想更改变量名,因为我通过关联数组键获取它,并且我希望它与插槽名称相同,这样我就可以知道要打印自定义插槽的位置。

当我在组件中执行 {{ $customLayout }} 时,我会打印字符串,而不是从 &lt;x-slot name="customLayout"&gt; 传递的模板。

有没有办法打印插槽传递的内容而不是局部变量?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    在 PHP 中,variable scope 要么是全局的(在所有函数之外),要么是本地的(例如,在 function 内部)。模板语言有自己的方式来传递你必须的参数给模板。您检测到的行为表明您使用的环境是全局范围的变量,这并不奇怪。因此,您没有两个同名的变量,而是一个变量,您打算在其中存储两个值,但不是这样,第一个值被第二个值覆盖。

    在一个变量中存储两个不同的值是不可能的。这意味着您需要一个替代方案。您可以使用静态字段或实例化它为组件属性/属性创建一个类,也许作为一个单例。然后,您可以使用$attributes-&gt;customLayout 之类的东西,而不是使用覆盖模板参数值的$customLayout。如果你不喜欢这种方法,那么你可以为你的变量使用前缀。

    编辑

    根据 Marco 的评论,$$customLayout 的变量 variable 成功了,因为原来 String 变量包含要显示的变量的实际名称。

    【讨论】:

    • 我设法以这种方式打印插槽内容:$$customLayout。使用双 $。
    • @Marko 编辑了我的答案,现在它反映了你的观点。
    • 谢谢。为了清楚起见,变量没有相同的名称,但我的第二个变量具有插槽变量的字符串值。因此,当我执行 $$ 时,我将字符串转换为插槽的变量名。
    • @Marko 明白了。将该信息附加到我的答案中。
    猜你喜欢
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 2014-01-12
    • 2014-04-29
    • 2019-11-24
    • 1970-01-01
    相关资源
    最近更新 更多