【问题标题】:Open PHP tags inside an @lang()在 @lang() 中打开 PHP 标签
【发布时间】:2019-07-30 08:28:14
【问题描述】:

我需要将 {[item.document_type]} 返回的值传递给刀片文件中的 Laravel 语言关联 @lang(),但在我的浏览器中出现未定义变量错误。

{[item.doucument_type]} 返回一个字符串,该字符串是@lang() 所需的地址。
但是,当它在括号内时,它会在下面抛出错误,它不适用于 $ 前缀。

这里的目的是国际化。

期望的结果:

{[item.filename]} - @lang('app_name.otherlanguagefile'): @lang({[item.document_type]})

错误:使用未定义的常量项 - 假定为“项”(这将引发错误 在 PHP 的未来版本中)

如果{[item.document_type]}@lang() 之外,则不会抛出错误

提前致谢。

【问题讨论】:

  • {[ 是有效的刀片语法吗?
  • 你能分享确切的错误信息吗?
  • item 是 php 变量还是 javascript 变量?

标签: php laravel laravel-blade


【解决方案1】:

@lang 需要一个字符串,但您传递的 {[item.document_type]} 不是字符串(它没有被引用),也不是变量,因此 PHP 试图将其解释为常量。这就是错误Use of undefined constant 的来源(请注意,错误表示未定义常量,而不是未定义变量)。

{[]} 不是刀片标签。您是在使用刀片之外的其他模板框架(例如 javascript),还是试图向用户显示文字括号,或者这是一个错误?

我怀疑你想要@lang($item['document_type'])@lang($item->document_type) 之类的东西,假设item 是传递给你的视图的PHP 变量。

如果item 是一个javascript 变量,那么您无法从刀片模板访问它,并且您尝试做的事情是不可能的;您将需要一种完全不同的方法。

如果您希望向用户显示括号,那么您需要在刀片视图中使用 {[@lang(...)]} 之类的内容。如果它不是一个变量,那么也许你想要{[@lang('item.document_type')]}

【讨论】:

  • 我们也在使用 Javascript,我不想显示括号
  • @NaishO'Loughlin 是 {[]} javascript 模板的一部分吗?
  • 这是刀片 php
  • 你是对的,该项目是在 api 调用中返回的,因此它不能在 php 内部传递,因为 php 首先编译。谢谢@travisBritz
【解决方案2】:

在你的 laravel 刀片文件中使用语言文件参数有两种方式。

In your file.php inside language folder

<?php

return [
  'variable' => 'this is test message'
];

?>

Laravel 刀片文件

{{ @lang('file.variable') }} 
            or 
{{ trans('file.variable') }}

你的输出将是

this is test message

在您的情况下,请为 laravel 使用 {{ }} 刀片引擎括号。 希望对你有帮助。

【讨论】:

    【解决方案3】:

    如果您将参数传递给刀片指令,则不需要大括号,例如 @lang($variable)

    {{ $item-&gt;filename }} - @lang($app_name-&gt;otherlanguagefile): @lang($item-&gt;document_type)??

    【讨论】:

    • {[item.filename]}{[item.document_type]} 不能在 lang 中工作
    • 您能否为您的代码添加一些解释 - 它是如何解决问题的?请记住,其他人应该能够从中学习
    • 如果使用 $ 变量赋值,则不需要大括号,但这不需要
    猜你喜欢
    • 2011-12-21
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2022-11-18
    相关资源
    最近更新 更多