我是Laravel 5的初学者。
我该如何在验证器中去除空白?我已经阅读了文档,但没有针对修剪(去除空格)的验证器。
这是我的规则:
$rules = [
'name' =>'required',
'email' => 'required|email',
'address' => 'required',
'phones' => 'required'
];
谢谢您的回答。
// trim all input
Input::merge(array_map(function ($value) {
if (is_string($value)) {
return trim($value);
} else {
return $value;
}
}, Input::all()));
您可以使用以下方式自动修剪所有输入:
”Input::merge(array_map('trim', Input::all()));
$username = Input::get('username'); // it's trimed
// ...
Validator::make(...);
由于文档Laravel HTTP Request, 默认情况下laravel会修整所有请求数据。
在验证部分使用Trim
的方式非常麻烦。
你可以通过中间件来管理此功能,如trim
或将空字符串转换为null
。
因为中间件在验证之前执行,所以您可以在验证时获得干净的数据。
$input = array_map('trim', $request->all());
这将从已发布的输入中删除所有空格,并且验证将正常工作。$input = request()->all();
$input['url'] = trim($input['url']);
request()->replace($input);
all()
函数来更新请求参数: 您还可以在请求文件中创建一个all()
函数来更新请求参数:
public function all()
{
$all = parent::all(); // $this->all();
$all['new_key'] = "new_data";
$all['old_key'] = "new_data";
return $all;
}
public function formatInput()
{
$input = array_map('trim', $this->all());
$this->replace($input);
return $this->all();
}
$data = $r->all();
foreach ($data as $key => $value) {
if($value!=""){ //If your primaryKey id is autoincrement
$data[$key] = preg_replace('/\s{2,}/',' ',$value);
}
}
$variable = new modelName($data);
$variable->save();
//Here Parameter Explaination
=> '/\s{2,}/' Pattern must write between '/ /' and \s{2,} means 2 or more than 2 spaces sholud be trim
=> ' ' second parameter is with. Means 1st parameter replace with 2nd parameter(here, one space)
=> $value is variable which is trim
我扩展了FormRequest
类并重写了prepareForValidation
方法,该方法在验证之前被调用。
// anything I don't want trimmed here
protected $untrimmable = [];
// replace the request with trimmed request here
protected function prepareForValidation()
{
return $this->replace($this->trimData($this->all()));
}
// recursively trim the fields in the request here
protected function trimData($data,$keyPrefix = '')
{
$trimmedFields = array_map(function($value,$field) use ($keyPrefix){
// if the value is an array handle it as
// a request array and send along the prefix
if(is_array($value)){
return $this->trimData($value,$this->dotIndex($keyPrefix,$field));
}
// if the field is not in the specified fields to be
// left untrimmed
if(
!in_array($this->dotIndex($keyPrefix,$field),$this->dontTrim) &&
!in_array($this->dotIndex($keyPrefix,$field), $this->untrimmable)
) {
return trim((string) $value);
}
return $value;
}, $data,array_keys($data));
return array_combine(array_keys($data),$trimmedFields);
}
功能:
untrimmable
属性。这里是一个链接到要点的链接https://gist.github.com/msbrime/336a788c7cced2137bdc7896c1241239
return is_string($value) ? trim($value) : $value;
顺便说一下,这个答案应该被选择。 - user6458222