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

Laravel控制器弹窗表单及Companies Controller关联表单显示问题求助

解决删除按钮表单代码显示问题

看起来你遇到的问题是Blade语法没被正确解析,导致表单代码直接暴露在页面上了。我们一步步来修复这个问题:

1. 确认视图文件后缀

首先要确保你的视图文件是以 .blade.php 结尾的——只有这种后缀的文件,Laravel才会解析其中的Blade语法(比如 {{ }}、@csrf 这些)。如果是普通的 .php 或 .html 文件,这些代码会被当成纯文本直接输出。

2. 优化并修正你的代码

我帮你调整了代码,用更简洁的Blade语法替代旧写法,同时避免多个删除按钮的ID冲突问题:

<li>
    <a href="#" onclick="
        var result = confirm('Are you sure you want to delete this project?');
        if (result) {
            event.preventDefault();
            document.getElementById('delete-form-{{ $company->id }}').submit();
        }
    ">Delete</a>
    <form 
        id="delete-form-{{ $company->id }}" 
        action="{{ route('companies.destroy', $company->id) }}" 
        method="POST" 
        style="display: none;"
    >
        @method('DELETE')
        @csrf
    </form>
</li>

代码调整细节:

  • 用 @method('DELETE') 替代手动写的隐藏输入框,这是Laravel推荐的Blade语法,更简洁不易出错。
  • 用 @csrf 替代 {{ csrf_field() }},同样是更现代的Blade写法。
  • 给表单ID加上 {{ $company->id }},这样当页面有多个公司的删除按钮时,每个表单ID都是唯一的,不会出现点击一个按钮提交多个表单的问题。
  • 调整了JS代码的格式,让它更易读维护。

3. 避免HTML转义问题

如果你是通过变量输出这段代码(比如 {{ $deleteButtonHtml }}),Laravel会自动转义HTML标签,导致代码显示出来。这种情况下,你需要用 {!! $deleteButtonHtml !!} 来输出,但更推荐的做法是直接把这段代码写在Blade视图文件里,而不是通过变量传递。

按上面的步骤调整后,页面上就只会显示Delete链接,表单会被display: none;隐藏,点击链接时会触发确认弹窗,确认后提交删除表单。

内容的提问来源于stack exchange,提问作者Lima

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:21:22