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