如何在URL中传递变量?Laravel Blade编辑链接故障求助
解决Laravel Blade中编辑链接无法生效的问题
看起来你遇到的核心问题是Blade模板语法没有被正确解析——因为你用单引号把整个HTML代码包裹起来了,在PHP/Blade环境里,单引号内的内容会被当作纯文本,里面的{{ $patient->id }}不会被替换成实际的患者ID,最终生成的链接是patients/{{ $patient->id }}/edit这种无效路径,自然无法正常跳转。
下面给你几种可行的解决方法,按推荐程度排序:
方法1:直接在Blade中编写原生HTML(最推荐)
去掉包裹的单引号,直接在Blade模板里写这段代码,让Blade引擎正常解析变量:
<td class="text-center"><a href="{{ url('patients/' . $patient->id . '/edit') }}">Edit</a></td>
如果你的路由有命名路由(比如在web.php里定义了Route::get('/patients/{patient}/edit', [PatientController::class, 'edit'])->name('patients.edit')),更推荐用route()辅助函数,这样更灵活,也能避免硬编码路径:
<td class="text-center"><a href="{{ route('patients.edit', $patient->id) }}">Edit</a></td> <!-- 进阶写法:直接传整个患者模型,Laravel会自动提取ID --> <td class="text-center"><a href="{{ route('patients.edit', $patient) }}">Edit</a></td>
方法2:如果必须在PHP代码块中输出
如果你是在@php...@endphp代码块里输出这段HTML,需要改用双引号包裹(双引号支持变量插值),或者手动拼接变量:
@php // 方式1:双引号插值解析变量 echo "<td class='text-center'><a href='patients/{$patient->id}/edit'>Edit</a></td>"; // 方式2:用url辅助函数拼接,路径更可靠 echo "<td class='text-center'><a href='" . url('patients/' . $patient->id . '/edit') . "'>Edit</a></td>"; @endphp
为什么单引号不行?
在PHP中,单引号字符串属于字面量字符串,里面的变量和特殊语法不会被解析。所以你用单引号包裹后,{{ $patient->id }}会原封不动地输出到HTML里,浏览器会把这个当作链接的一部分,自然无法跳转到正确的编辑页面。
内容的提问来源于stack exchange,提问作者R. Mseti
相关产品推荐
相关产品推荐

