如何在Laravel 8的edit blade模板中实现单选按钮编辑态默认选中?
问题根源
你当前写法不生效的核心原因是:你在原生PHP的echo输出语句中嵌套了Blade模板语法{{ }}。Blade模板引擎只会解析模板文件中直接书写的语法标记,不会解析你通过PHP动态输出的字符串内的Blade语法,因此你的选中判断逻辑完全没有被执行。
另外你的代码还存在两个小问题:
- 标签名拼写错误,
<lable>应为<label> label标签不需要type=text属性,该属性仅适用于input标签
解决方案
方案1:直接修改现有原生PHP写法
如果你要保留当前模板内写原生PHP查询数据库的逻辑,只需要把echo语句中的Blade语法替换为原生PHP的三元运算拼接即可,修正后的代码如下:
echo '<tr><td><input type="radio" name="track_id" value="'.$id.'" '.($ticket->track_id == $id ? 'checked' : '').' >'.$title.'</td><td><label name="tracks" value="'.$id.'">'.$type.'</label></td></tr>';
方案2:符合Laravel规范的写法(更推荐)
不建议在视图层直接写数据库连接逻辑,会导致代码耦合度高难以维护,按照Laravel的MVC架构调整如下:
- 先在控制器中查询数据并传给视图
// 控制器的编辑方法示例 public function edit($ticketId) { $ticket = \App\Models\Ticket::findOrFail($ticketId); // 查询track表数据 $tracks = \DB::table('track')->get(['id', 'track_title', 'track_type']); return view('你的编辑视图名', compact('ticket', 'tracks')); }
- 视图文件直接使用Blade语法遍历渲染,不需要写任何原生PHP和数据库连接代码
<div class="row"> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <table border="1"> <tr> <th><strong>Title</strong></th> <th><strong>Type</strong></th> </tr> @foreach($tracks as $track) <tr> <td> <input type="radio" name="track_id" value="{{ $track->id }}" {{ $ticket->track_id == $track->id ? 'checked' : '' }}> {{ $track->track_title }} </td> <td> <label name="tracks" value="{{ $track->id }}">{{ $track->track_type }}</label> </td> </tr> @endforeach </table> </div> </div> </div>
内容的提问来源于stack exchange,提问作者Fahad
相关产品推荐
相关产品推荐

