使用 Laravel 中的请求获取用户输入,并将其传递给验证


get user input using Request in laravel and pass it for validation

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

传递给 Illuminate''Validation''Factory::make() 的参数 1 必须是 类型数组,给定字符串,调用 C:''xampp''htdocs''mylaravel''vendor''laravel''framework''src''Illuminate''Support''Facades''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');
        }
    }
}

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

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

如果您想探索更多,这里是文档。

您需要在

Validator::make 内部传递array

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

例如:

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

文档 : https://laravel.com/docs/4.2/validation

你在验证中将参数作为数组传递,所以你的代码将是

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