使用laravel中的Request获取用户输入并将其传递以进行验证

时间:2016-02-11 08:28:14

标签: php laravel

我是laravel的新手。我有一个表单,我必须填写一个名称字段并将其发送到控制器store()方法进行验证。否则它将显示自定义错误。但是每当我提交带有或没有输入的表单时,我都会收到以下错误。

  

传递给Illuminate \ Validation \ Factory :: make()的参数1必须是   类型数组,给定的字符串,调用   C:\ XAMPP \ htdocs中\ mylaravel \供应商\ laravel \框架的\ src \照亮的\ Support \外立面\ Facade.php   在第221行并定义

用于实验目的我使用以下格式捕获用户输入

$data = $request->input('name');

create.blade.php:

<h1>login form</h1>
      @if($errors->has())
        <div><span> Opps !! </span></br>
          <ul>
            @foreach ($errors->all() as $error)
                <li> {{ $error }}</li>    
            @endforeach
          </ul>
        </div>
      @endif
   {!!Form::open(array('url'=>'user','method'=>'POST', 'files'=>true)) !!}

   {!!Form::label('name','Your name')!!}
   {!!Form::text('name')!!}
   </br>

   {!!Form::submit('submit')!!}
    {!!Form::close()!!}
userController.php文件中的

store()方法:

public function store(Request $request)
{
    //
    $data = $request->input('name');

    $rules = array(
       'name' => 'unique:users,name|required|alpha_num'

    );

    // Create a new validator instance.
    $validator = Validator::make($data, $rules);
    if($validator->fails()){

        $errors=$validator->messages();
        return Redirect::route('user.create')->withErrors($validator);

    }else{

            return Redirect::route('user.index');
        }

    }

}

3 个答案:

答案 0 :(得分:3)

根据您的错误,Validator期望它的参数为数组,但您将字符串作为$data= $request->input('name')传递给它。所以,你应该在Validator::make()中传递数组。下面的代码应该适合你。

$validator = Validator::make($request->all(), [
    'name' => 'unique:users,name|required|alpha_num'
]);

如果您想了解更多内容,请参阅doc

答案 1 :(得分:2)

您需要在array内传递Validator::make

现在你正在以$data变量的形式传递字符串。

例如:

$validator = Validator::make(
    array('name' => 'Dayle'),
    array('name' => 'required|min:5')
);

DOCS:https://laravel.com/docs/4.2/validation

答案 2 :(得分:2)

你已经将params作为数组传递给验证,所以你的代码将是

public function store(Request $request)
{
//
    $data = $request->all();

$rules = array(
   'name' => 'unique:users,name|required|alpha_num'

);

// Create a new validator instance.
$validator = Validator::make($data, $rules);
if($validator->fails()){

    $errors=$validator->messages();
    return Redirect::route('user.create')->withErrors($validator);

}else{

        return Redirect::route('user.index');
    }

}

}