我是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');
}
}
}
答案 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')
);
答案 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');
}
}
}