如何验证单选按钮/复选框并且必须在 laravel 中选择一个

Posted

技术标签:

【中文标题】如何验证单选按钮/复选框并且必须在 laravel 中选择一个【英文标题】:How to validate radio button/checkbox and must to select one in laravel 【发布时间】:2015-08-17 22:45:00 【问题描述】:

我正在尝试验证 Laravel 中的单选按钮。这是我的代码,但它不起作用。

就我而言,我有一个 dynamic 表单,其中包含许多不同类型的问题,例如:收音机、支票簿、单输入、数字输入……所以我必须使用数组名称每种类型的问题。例如:name="radio['.$k.']"。

在我的控制器中,我进行了验证,$key 是初始形式的 $k 值。

public function rules()

 $rules = [];
if (Input::has('radio')) 
    foreach (Input::get('radio') as $key => $val) 
        $rules['radio.' . $key] = 'required';
    
 
if (Input::has('singleinput')) 
            foreach (Input::get('singleinput') as $key => $val) 
                $rules['singleinput.'.$key] = 'required|max:10';
                
            



 public function messages()
    
        $messages = [];

        if (Input::has('radio')) 
      // some code here;
         
     

public function answer_store($survey_id, $patient_id)
    
        $rule = $this->rules();
        $message = $this->messages();
        $validator = Validator::make(Input::all(), $rule, $message);

在视图中:

<input type="radio" name="radio['.$k.']" value="'.$str1.'">'.$answer->answer_body

我的代码适用于文本输入类型,但不适用于单选和复选框。 谁能帮帮我?

【问题讨论】:

验证时,您需要知道$key 是什么,否则您只是需要您已经拥有的东西,这没有任何意义并且浪费时间。 @user3158900:就我而言,我有一个包含许多不同类型问题的表单,例如:收音机、支票簿、单输入、数字输入……所以我对每个问题都使用了数组名称类型的问题。例如:name="radio['.$k.']"。在我的控制器中,我进行验证,$key 是初始形式的 $k 值。 Anw,我更清楚地更新了我的问题。 【参考方案1】:

好的,没有回复,如果您使用的是 Laravel 5,这就是我的答案。

Laravel 5 在您提交表单时使用请求。您可以在该数据执行控制器之前对其执行验证。

首先使用你的终端运行一个工匠命令

php artisan make:request MyRequest

这将在 App\Http\Requests 中创建一个文件。

把这个放到新的请求文件中

<?php namespace App\Http\Requests;

use App\Http\Requests\Request;

class MyRequest extends Request 

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    
        return true;
    

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    
        return [
            'myRadios' => 'required'
        ];
    


在您看来,拥有如下所示的收音机,确保您想要的收音机组都具有相同的名称。

<input type="radio" name="myRadios" value="1"> Number 1
<input type="radio" name="myRadios" value="2"> Number 2
<input type="radio" name="myRadios" value="3"> Number 3

在您的控制器中,您需要引用请求文件并使用依赖注入将其放入您的函数中。

当你想使用被选中的单选值时,你可以使用 $request 数组

<?php namespace App\Http\Controllers;

use App\Http\Requests;
use App\Http\Controllers\Controller;

use Illuminate\Http\Request;
use App\Http\Requests\MyRequest;

class MyController extends Controller 

    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function myFormFunction(MyRequest $request)
    
        //Get the value of the radio selected
        $myVariable = $request['myRadios'];
    



?>

【讨论】:

谢谢,但我认为我的解决方案也使用“必需”规则,与您一样,它适用于文本输入验证。我也会尝试你的解决方案。我正在使用 Laravel 5。 我在这里发现了我的问题。在规则代码中使用 if (Input::has('radio')) 。因为如果我不选择任何东西,就没有任何与电台相关的信息要验证。【参考方案2】:

一天后,我找到了解决问题的方法。

在规则代码中使用 if (Input::has('radio')) 。因为如果我 不要选择任何东西,没有任何与收音机相关的信息 验证。

对于我使用的一系列无线电问题:

<input type="radio" name="radio['.$count_radio.']" value="'.$str1.'">

我的问题是我不知道每个表格有多少无线电问题。我有很多不同的形式。我将统计 View 文件中单选表的数量并传递给 Controll ($count_radio)。

在控制器中,我制定这样的规则:

for ($key = 1; $key <= $count_radio; $key++) 
            $rules['radio.' . $key] = 'required';
        

我还在视图中添加了这段代码的错误:

       if($errors->has('radio.'.$count_radio.'')) 
            echo $errors->first('radio.'.$count_radio.'');
       

就是这样。

【讨论】:

【参考方案3】:

您的输入标签以&lt;/label&gt; 结尾。 不确定这是否会有所帮助。

【讨论】:

谢谢,但我不明白你的意思?我可以使用 进行验证 @Giang 我认为他是在说您在输入标签中缺少结束 /&lt;input ... /&gt;,但这是一个标记,而不是导致您的问题的原因。 你使用的是什么版本的 Laravel?

以上是关于如何验证单选按钮/复选框并且必须在 laravel 中选择一个的主要内容,如果未能解决你的问题,请参考以下文章

如何验证 Laravel 5.4 单选按钮?

javascript中的单选按钮验证

jQuery 验证 - 使用自定义单选按钮(打开/关闭)

在隐藏的单选框/复选框上显示 HTML5 错误消息/验证

jQuery 验证,将错误消息放在复选框和单选按钮组下方

自定义单选按钮:如何取消选中? (复选框黑客)[重复]