首页 文章

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

提问于
浏览
1

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

参数1传递给Illuminate \ Validation \ Factory :: make()必须是类型数组,给定字符串,在C:\ xampp \ htdocs \ mylaravel \ vendor \ laravel \ framework \ src \ Illuminate \ Support \ Facades \中调用第221行的Facade.php并定义

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

$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()!!}

store() method in userController.php file:

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 回答

  • 3

    你需要在 Validator::make 内传递 array .

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

    例如 :

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

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

  • 2

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

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

    如果你想探索更多,这是doc .

  • 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');
        }
    
    }
    
    }
    

相关问题