表单提交时如何验证编辑帖子的单选按钮是否被选中?
如何验证Laravel表单提交时是否有帖子单选按钮被选中
看起来你是想在表单提交后验证是否有帖子对应的单选按钮被选中,但你的控制器逻辑里有个小问题,导致$isAnyPostButtonChecked永远会是false,我来帮你修正并优化这个实现。
问题分析
你当前的代码里,初始把$isAnyPostButtonChecked设为false,然后用&&去判断:
$isAnyPostButtonChecked = false; $isAnyPostButtonChecked = $isAnyPostButtonChecked && (old('radiobutton') && old('radiobutton') == $event->id);
因为false && 任何表达式的结果都是false,所以不管单选按钮有没有被选中,这个变量最终都会是false,这显然不是你想要的效果。
修正后的控制器方法
我们需要调整逻辑,根据你的需求选择对应的实现方式:
场景1:验证是否选中了特定帖子的单选按钮
如果你要确认提交的单选按钮是否是当前编辑的帖子ID,可以这样写:
public function edit($id) { // 获取当前编辑的帖子数据 $post = Post::findOrFail($id); // 假设你已经有$event数据的获取逻辑 $event = // 你的事件数据获取代码 // 判断旧输入中是否选中了当前帖子对应的单选按钮 $isPostButtonChecked = old('radiobutton') == $post->id; return view('posts.edit') ->with('post', $post) ->with('isPostChecked', $isPostButtonChecked); }
场景2:验证是否有任意一个单选按钮被选中
如果只是想知道是否有单选按钮被提交(不管选的是哪个),可以简化为:
public function edit($id) { $post = Post::findOrFail($id); // 判断旧输入中是否存在单选按钮的值 $isAnyPostChecked = !empty(old('radiobutton')); return view('posts.edit') ->with('post', $post) ->with('isAnyPostChecked', $isAnyPostChecked); }
视图中的验证展示
在视图里,你可以根据传递的变量展示验证结果,或者给出提示:
{{-- 直接显示选中状态 --}} <p>是否有单选按钮被选中:{{ $isAnyPostChecked ? '是' : '否' }}</p> {{-- 若未选中则显示警告提示 --}} @if(!$isAnyPostChecked) <div class="alert alert-warning">请选择一个帖子对应的单选按钮</div> @endif {{-- 单选按钮的正确渲染示例(保持提交前的选中状态) --}} <input type="radio" name="radiobutton" value="{{ $post->id }}" {{ old('radiobutton') == $post->id ? 'checked' : '' }}> <label>{{ $post->title }}</label>
这样调整后,就能准确判断表单提交时是否有单选按钮被选中,并且正确传递状态到视图了。
内容的提问来源于stack exchange,提问作者johnW
相关产品推荐
相关产品推荐

