这一整天都让我抓狂!!
我的表单创建用户。创建这些用户的管理员可以添加几行输入,然后在最后保存所有内容。我在jQuery中使用clone()方法,我已经对所需的输入等进行了客户端验证。我有一个非常强大的域层,但现在我需要服务器端验证,这样Laravel就可以检查电子邮件是否已经存在,因为它必须是唯一的。我对Laravel非常精通,但对于新的FormRequest对象,我一直纠结于如何循环通过每个输入等,因为FormRequestObject似乎只接受一个条目。这一切都在ajax中。。。
我的表单数据如下:
counter:2
_token:KwGAUheSXbzkInh1RZ4RPenx4Fd4fF5DsPm5bjyO
firstname_1:name1
lastname_1:last1
email_1:email@email.com
password_1:keith
firstname_2:name2
lastname_2:last2
email_2:email@email.com
password_2:keith
尽可能地,输入名称具有递增的id,因此表单请求中的rules()必须循环通过这些名称。我真的很困,在网上找不到一个例子。
我的表单重用类如下所示:
<?php namespace hidden'Http'Controllers'UserAccess'Requests;
use hidden'Http'Requests'Request;
use Illuminate'Auth'Guard;
use hidden'Domain'Services'UserAccess'GetUserFromEmailService;
class CreateAdministratorRequest extends Request {
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'firstname' => 'required',
'lastname' => 'required',
'email' => 'required|email|unique:users,email',
'password' => 'required'
];
}
}
到目前为止,我的控制器方法(它最终会循环通过输入并发出命令,但目前毫无意义):
/**
* @param CreateAdministratorRequest $request
*/
public function createAdministrators(CreateAdministratorRequest $request)
{
// dispatch command per entry
}
如果您想尽可能地保留您的结构,可以执行以下操作。
public function rules()
{
$counter = $this->get('counter');
$emails= [];
// validate manually if every submitted email is unique
// so, we need every email value
for ($i = 1; $i <= $counter; $i++){
$emails[] = $this->get('email_' . $i);
}
// Now, validate if every email between them are unique
// array_unique() delete repeated values, so we compare
// the size before and after filter the values
$unique = (count($emails) === count(array_unique($emails)));
if (! $unique){
return redirect()->back()
->withMessage('Sorry, all emails should be different');
}
// Now, you need to add every field into the rules
$rules = [];
for ($i = 1; $i <= $counter; $i++){
$rules['email_' . $i] = 'required|email|unique:users,email';
$rules['lastname_' . $i] = 'required';
$rules['firstname_' . $i] = 'required';
$rules['password_' . $i] = 'required';
}
return $rules;
}