【问题标题】:Image validation in Edit form in laravel 5.2laravel 5.2中编辑表单中的图像验证
【发布时间】:2016-12-28 03:18:58
【问题描述】:

我有一个问题,请看下面。

我有一个编辑用户配置文件部分,我们在其中更新用户帐户,我想检查表中是否不存在图像并且用户也没有提供图像,那么我们必须验证图像并显示错误。如果表中已经存在图像,则无需检查图像验证。除了图像验证,一切都很好。

我正在使用 from 请求进行验证。以下是我在请求文件中的验证规则。

public function rules()
{
    return [
        'user_type' =>'required',
        'first_name' =>'required|max:100',
        'last_name' =>'required|max:100',
        'email' =>'required|email|max:100',
        'image' =>'required|image',
        'zip_code' =>'required|numeric|min:5',
    ];
}

我正在使用 Laravel 5.2,提前致谢。

【问题讨论】:

    标签: php validation laravel laravel-5.2 laravel-validation


    【解决方案1】:

    您可以创建另一个请求类并将其命名为 UserUpdateRequest 与 artisan 喜欢

    php artisan make:request UserUpdateRequest
    

    在这个请求类中你只需要删除“必需”它就会像这样

    'image' => 'image'
    

    并将 UserUpdateResuest 设置为更新方法的参数,如

    public function update(UserUpdateRequest $userUpdateRequest, $id){
        //
    }
    

    【讨论】:

      【解决方案2】:

      最后我在@Amir 的帮助下找到了解决方案。下面是这个问题的完整解决方案。

      //在用户模型中添加这个

      public function notHavingImageInDb(){
          return (empty($this->image))?true:false;
          //return true;
      }
      

      //在request类中导入User模型和Auth类。

      use App\User;
      use Auth;
      

      //从请求中添加这个

      public function rules()
          {
              $user = User::find(Auth::id());
      
              $rules =  [
                  'user_type' =>'required',
                  'first_name' =>'required|max:100',
                  'last_name' =>'required|max:100',
                  'email' =>'required|email|max:100',
                  'image' =>'image',
                  'zip_code' =>'required|numeric|min:5',
              ];
      
              if ($user->notHavingImageInDb()){
                  $rules['image'] = 'required|image';
              }
      
              return $rules;
          }
      

      现在一切都完成了。

      在上面的代码中,我们检查列是否在验证中具有某些值,如果是,则模型函数返回 true,这使得 if 条件在请求类中处于活动状态,否则,if 条件保持不活动状态。像魅力一样工作。

      谢谢

      【讨论】:

        【解决方案3】:

        看看Conditionally Adding Rules

        类似:

          $v->sometimes(['image'], 'required|image', function($input) use ($user)  {
              return $user->notHavingImageInDb();
          });
        

        你也可以使用简单的逻辑,比如:

        public function rules()
        {
           $roles = [
                    'user_type' =>'required',
                    'first_name' =>'required|max:100',
                    'last_name' =>'required|max:100',
                    'email' =>'required|email|max:100',
                    'image' =>'image',
                    'zip_code' =>'required|numeric|min:5',
                   ];
        
            if ($user->notHavingImageInDb())
              $rules['image'] = 'required|image';
        
            return $rules
        }
        

        【讨论】:

        • 感谢兄弟回复。但我不想要默认的图像验证,如果数据库中没有图像并且用户也没有提供图像,我只想要它。所以我不认为我们会为图像添加所需的规则。除此之外,我还需要在哪里添加以下代码。 $v->sometimes(['image'], 'required|image', function($input) use ($user) { return $user->notHavingImageInDb(); });
        • 只需将逻辑更改为您需要的任何内容,使用第二个示例,如果(数据库中没有图像并且用户也没有提供图像)将验证添加到规则中
        • “我只能带你进门。你是必须穿过它的那个人。”
        • 我在这里发布答案。 stackoverflow.com/questions/39064849/…
        猜你喜欢
        • 2016-08-28
        • 2016-05-23
        • 1970-01-01
        • 1970-01-01
        • 2017-01-29
        • 1970-01-01
        • 2022-11-03
        • 2016-08-05
        • 1970-01-01
        相关资源
        最近更新 更多