在设置值之前检查请求输入是不是不为空

Posted

技术标签:

【中文标题】在设置值之前检查请求输入是不是不为空【英文标题】:Check if request input is not null before set the value在设置值之前检查请求输入是否不为空 【发布时间】:2017-06-30 11:07:06 【问题描述】:

我有一个设置用户设置的 API。因为两个输入都不是强制性的,所以我想先检查该值是否存在,然后将其设置为模型属性以避免空值。

$this->InputValidator->validate($request, [
                'firsname' => 'string',
                'lastname' => 'string',
                'email' => 'email',
                'mobile_phone' => 'string',
                'address' => 'string',
                'language' => 'string',
                'timezone' => 'string',
                'nationality' => 'string',
                'profile_photo' => 'url'
            ]);

            $userInformation = new UserInformation([
                'firstname' => $request->input('firstname'),
                'lastname' => $request->input('lastname'),
                'email' => $request->input('email'),
                'mobile_phone' => $request->input('mobile_phone'),
                'address' => $request->input('address'),
                'profile_photo' => $request->input('profile_photo')
            ]);
            $User->information()->save($userInformation);

特别是当其中一个输入不存在时,我不想将其传递给模型。我也不想要求输入

【问题讨论】:

【参考方案1】:

这个问题的答案来自here:

if($request->filled('user_id'))

【讨论】:

【参考方案2】:

这样做

$userInformation = new UserInformation;

if(request->has('firstname'))
   $userInformation->firstname = $request->firstname;

if(request->has('lastnme'))
   $userInformation->lastname = $request->lastname;


 // do it for all

 $User->information()->save($userInformation);

编辑:或者使用表单请求,这是一个更好的方法

【讨论】:

我刚刚测试过,即使firstname 为空,request->has('firstname') 也会返回 true。也许是 laravel 版本的东西,我用的是 5.8 我也不确定,但是您可以创建一个中间件,在请求中取消设置空值,或者您可以添加 request->get('firstname') != null ,任何适合您的方式【参考方案3】:

检查每个值并将其首先推送到数组中。然后赋值数组。

<?php
$userArray=array();
if($request->input('firstname') != "") $userArray['firstname']=$request->input('firstname');

if($request->input('lastname') != "") $userArray['lastname']=$request->input('lastname');
if($request->input('email') != "") $userArray['email']=$request->input('email');
if($request->input('mobile_phone') != "") $userArray['mobile_phone']=$request->input('mobile_phone');
if($request->input('address') != "") $userArray['address']=$request->input('address');
if($request->input('profile_photo') != "") $userArray['profile_photo']=$request->input('profile_photo');

$userInformation = new UserInformation($userArray);
?>

【讨论】:

更好地使用 $request->has('input') ,它适用于空字符串和空值(在 laravel 5.4 中,空字符串在请求中被转换为空,所以这不起作用)跨度>

以上是关于在设置值之前检查请求输入是不是不为空的主要内容,如果未能解决你的问题,请参考以下文章

检查返回值是不是不为空,如果是,则在一行中使用一个方法调用将其分配

编写 CHECK CONSTRAINT 的一种更好的方法,它检查一个值是不是不为空

java判断字符串是不是为空

检查所有三列是不是不为空或为空

linux字符测试

Selenium Python 检查变量值是不是不为空。我得到 False 但有一个价值