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

Laravel中如何通过AJAX将数据与嵌套路由参数传递到控制器

问题根因

你遇到的dd()未执行是因为路由参数匹配失败、变量拼写错误两个核心问题导致请求根本没有进入目标控制器方法,具体问题点如下:

  • 模板中$gajllery->id拼写错误,多了一个字母j,导致路由生成的URL中gallery_id参数异常,甚至URL生成失败
  • 嵌套资源路由的destroy方法会自动传递两个路由参数(父模型product_id、子模型gallery_id),但你的控制器方法只接收了Product $product一个参数,参数数量不匹配导致路由绑定失败
  • AJAX请求中的name变量没有赋值,未定义的变量会导致JS报错,请求根本不会发送

修复步骤

  1. 修正拼写错误
    将AJAX部分的$gajllery->id改为正确的$gallery->id

  2. 补全控制器方法参数
    嵌套资源路由的参数顺序为「父模型参数在前,子模型参数在后」,修改控制器方法为:

public function destroy(Product $product, Gallery $gallery, Request $request)
{
    $filename = $request->get('name');
    dd($filename);
    // 优化建议:已通过隐式绑定拿到gallery实例,不需要额外传name参数
    // 直接用以下代码即可,无需前端传文件名:
    // Storage::disk('public')->delete($gallery->image);
    // $gallery->delete();
    Gallery::where('image', $filename)->delete();
    Storage::disk('public')->delete($filename);
}

如果不需要隐式绑定Gallery模型,也可以写成:

public function destroy(Product $product, $gallery_id, Request $request)
  1. 修正AJAX的name参数赋值
    提前定义name变量,示例如下:
@isset($gallery)
// 示例从gallery实例中直接取文件名,可根据你的业务逻辑调整取值方式
const name = '{{ $gallery->image }}';
$.ajax({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
    },
    type: 'POST',
    url: '{{ route('products.galleries.destroy', [$product->id, $gallery->id]) }}',
    data : {
        "_method" : "DELETE" ,
        name: name
    },
    success: function (data) {
        console.log(data);
    },
    error: function (e){
        console.log(e);
    },
});
@endisset

验证方法

修复后打开浏览器控制台的「网络」标签,触发请求查看状态码:

  • 状态码为200说明请求正常进入控制器,dd()会正常输出
  • 状态码为404说明路由参数仍有错误,检查生成的URL是否符合products/{product}/galleries/{gallery}的格式
  • 状态码为500说明控制器逻辑有错误,查看响应详情定位问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:18:02