Php Laravel 4中相关模型验证的最佳实践?

Php Laravel 4中相关模型验证的最佳实践?,php,validation,laravel-4,Php,Validation,Laravel 4,在启动保存之前,我希望能够验证具有相关模型的创建表单。我正在保存一个具有多个相关模型的组织。由于我有许多多对多关系,我必须首先创建主模型,然后通过一个艰苦的过程,从输入数据分别创建每个相关模型。创建初始组织后,我在组织存储库中调用“createRelated”方法 public function createRelated($input) { $this->orgtypes()->attach(1, ['objectstate_id' => ORGANIZATION_S

在启动保存之前,我希望能够验证具有相关模型的创建表单。我正在保存一个具有多个相关模型的组织。由于我有许多多对多关系,我必须首先创建主模型,然后通过一个艰苦的过程,从输入数据分别创建每个相关模型。创建初始组织后,我在组织存储库中调用“createRelated”方法

public function createRelated($input)
{
    $this->orgtypes()->attach(1, ['objectstate_id' => ORGANIZATION_STARTED]);
    $this->addresses()->create(array_only($input, ['street1', 'zip', 'city', 'state_code']));
    for ($i=0; $i < 2; $i++) 
    { 
        if($input['phone_numbers_'.$i.'_number'])
        {
            $this->phoneNumbers()->create(['phone_number_type_id' => $input['phone_numbers_'.$i.'_phone_number_type_id'], 'number' => $input['phone_numbers_'.$i.'_number']]);
        }
    }  
    $this->procedures()->attach($input['procedures']);     
    $input['objectstate_id'] = USER_STARTED;
    $input['password'] = $this->encryptPassword($input['password']);
    $this->users()->create(array_only($input, ['first_name', 'last_name', 'email', 'password', 'objectstate_id']));
    $this->profileElements()->create(['type' => 'short_description', 'content' => $input['short_description']]);
}

这一切似乎过于复杂和脆弱。

我认为最艰难的决定是在调用验证方法之前将验证规则放在何处。以下是一个有帮助的链接:

我是这样做的,但我仍在决定将验证规则/错误消息放在哪里

Laravel 4的内置验证类有一种方法使验证变得非常简单:

Validator::make($input, $rules=array(), $errors=array())
(第三个参数是可选的)

在本例中,在调用create方法(假设用于保存元素)之前,可以执行以下操作:

$rules = array(
    "first_name" : "required",
    "second_name" : "required",
     and so on...
);
我给你的链接会给你可能的规则。最后,您还可以创建自己的自定义错误消息,如下所示:

$messages = array(
    "required" => "This :attribute field is required"
    and so on...
);
:属性将自动填充验证失败的字段

然后,要进行验证,只需传入这些数组并调用passs()方法或fails()方法:

Validator::make($input,$rules,$messages)->passes()
(如果通过,则返回true;如果失败,则返回false) 我认为这样做看起来更干净:

$validation = Validator::make($input, $rules, $messages);
if ($validation->passes()) {
      // save data
}
作为奖励,您可以从此阵列访问错误消息:

$errors = $validation->messages();

所以,我希望这能回答你的问题。我认为最大的问题是把这些验证规则放在哪里,因为我认为还没有一个惯例。如果您有任何见解和意见,请与我们分享。谢谢。

我目前认为我的解决方案很差。我将存储库模式和验证作为一项服务来使用。是的,我认为这是一个与您最初的帖子完全不同的主题,因为现在您要问的是应用程序架构方面的问题,而不是如何验证输入。
$rules = array(
    "first_name" : "required",
    "second_name" : "required",
     and so on...
);
$messages = array(
    "required" => "This :attribute field is required"
    and so on...
);
$validation = Validator::make($input, $rules, $messages);
if ($validation->passes()) {
      // save data
}
$errors = $validation->messages();