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

Laravel中Blade视图无法向控制器传递数据问题求助

问题分析与解决方案

看起来你遇到了Laravel路由模型绑定失效的问题,导致destroy方法里的$Document实例为空,没法正常执行删除操作。核心原因是路由参数名称和控制器方法的参数名称不匹配,Laravel没法自动找到对应的模型实例。

为什么会出现这个问题?

你用Route::resource('document-tracking', ...)创建了资源路由,它的destroy方法对应的URL参数是{document-tracking}(Laravel会自动转换为下划线格式document_tracking)。但你的控制器方法参数是Document $Document,变量名$Document和路由参数document_tracking不匹配,所以路由模型绑定失败,返回了空的模型实例。


解决方案(两种可选)

方案1:修改控制器方法的参数名称,匹配路由参数

把控制器的destroy方法参数改成和路由参数对应的名称(Laravel会自动处理下划线和驼峰命名的转换):

use App\Models\Document; // 确保已经正确引入模型类

public function destroy(Document $documentTracking) {
    $this->authorize('delete', $documentTracking);
    $documentTracking->delete();
    return redirect()->route('document-tracking.index')->with ('success', 'Document Deleted Successfully!');
}

这样路由模型绑定就能正确识别参数,自动查询对应ID的Document实例。

方案2:自定义资源路由的参数名称

如果你不想修改控制器的参数名称,可以在路由定义时,通过parameters方法指定路由参数对应的模型参数名:

Route::resource('document-tracking', App\Http\Controllers\DocumentTracking\DocumentController::class)
    ->parameters([
        'document-tracking' => 'document'
    ]);

这样路由的参数会变成{document},和你控制器里的Document $Document参数名匹配,绑定就能正常生效。


额外检查项

  1. 确保你的Document模型类已经正确引入到控制器中,控制器顶部要有use App\Models\Document;(根据你的模型实际存储路径调整)。
  2. 确认Document模型的主键是默认的id,如果用了自定义主键,需要在模型里设置protected $primaryKey = '你的主键字段名';。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:52:34