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

Laravel与AMP渲染服务端消息报错:未定义变量loged

解决Laravel与AMP渲染服务端消息时的“未定义变量loged”问题

我猜你肯定是把AMP代码写在Laravel的Blade模板文件里了,对吧?问题的根源其实很简单——Blade模板的语法和AMP Mustache模板的语法冲突了:两者都用{{ }}作为变量占位符。当Laravel渲染Blade模板时,会把AMP里的{{ loged }}当成PHP变量去解析,可这个变量在你的PHP代码里根本没定义,所以就抛出了“Use of undefined constant loged - assumed 'loged'”的错误。

下面给你几个实用的解决方案:

方案1:用Blade的@verbatim指令包裹AMP模板块

这个方法最直观,把包含Mustache语法的AMP代码用@verbatim和@endverbatim包起来,告诉Blade不要解析里面的{{ }}:

<div submit-error>
    <template type="amp-mustache">
        <a style="cursor: pointer;" id="submitloginbtn" on="tap:loginform.show,submitloginbtn.hide" > Réessayer </a>
    </template>
</div>
<div submit-success>
    @verbatim
    <template type="amp-mustache">Vous êtes connecté {{ loged }}</template>
    @endverbatim
</div>

方案2:单独转义Mustache占位符

如果你只需要转义少数几个{{ }},可以在每个占位符前加个@符号:

<div submit-success>
    <template type="amp-mustache">Vous êtes connecté @{{ loged }}</template>
</div>

Blade会把@{{ }}解析成原生的{{ }}输出到前端,这样AMP就能正确识别Mustache变量了。

方案3:用原生输出标签{!! !!}

如果这段AMP内容里没有需要Blade解析的部分,也可以用{!! !!}直接输出原始HTML,跳过Blade的解析流程:

<div submit-success>
    {!! '<template type="amp-mustache">Vous êtes connecté {{ loged }}</template>' !!}
</div>

另外再提醒你一句:你的userAjaxHasNotLogedIn方法返回的是400状态码的JSON,这个只会触发AMP的submit-error模板;如果是登录成功的场景,记得返回200状态码的JSON(比如return response()->json(['loged' => true], 200)->header('AMP-Access-Control-Allow-Source-Origin',"http://localhost:8000")),这样才会触发submit-success模板哦。

内容的提问来源于stack exchange,提问作者j-dope

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:43:00