Laravel验证整数是否接受空字符串?

时间:2018-04-26 07:53:59

标签: php validation laravel-5

我正在创建一些小API,我可以通过邮递员创建博客文章。我使用laravel 5,我遇到了一个问题。

在API调用中,我可以指定用户ID,因此帖子是由其他人编写的,而不是现在进行API调用的人。我当前登录的用户在邮递员中使用令牌指定。

所以现在我的问题是,当我创建API调用并将我的user_id指定为空字符串时     " userID":""

它会抛出一个错误,因为我指定id是一个像这样的int

'userID' => ['integer']

错误是

"Type error: Argument passed to construct() must be of the type integer or null, string given",

为什么接受空字符串?我该如何正确验证? 请注意,不必在post请求中指定userID。如果未指定,它将从您当前登录的用户那里获取。 (在令牌中指定)

3 个答案:

答案 0 :(得分:3)

一起使用两个验证规则将解决问题。 requiredinteger

如你所说,你不想强制要求:

使用这些验证规则组合:

nullable|integer

答案 1 :(得分:1)

我遇到了这个问题。所以,我在 laravel 文档中找到了这个描述:

“默认情况下,当被验证的属性不存在或包含空字符串时,不会运行正常的验证规则,包括自定义扩展。”

所以...当你有一个空字符串数据的属性时,正常的验证规则不会被执行。

所以...我有一个想法来解决这个问题,即在我的模型中覆盖函数 setAttribute:

public function setAttribute($key, $value)
{
   parent::setAttribute($key, $value);

    if (is_string($value))
    {
        $this->attributes[$key] = empty(trim($value)) ? null : $value;
    }
}

所以...所有时间都必须在您的数据库中保存模型,空值将被转换为空值。

因此,如果数据为空或整数,则使用“可空|整数”规则来使用验证规则。如果数据为空字符串,则不考虑验证规则,但会先将数据转换为空字符串,然后再保存到数据库中。

我使用 setAttribute 方法创建了我的 BaseModel(抽象类),并且我的所有模型都继承了这个类。

abstract class BaseModel extends Model
{

   public function setAttribute($key, $value)
   {
      parent::setAttribute($key, $value);

       if (is_string($value))
       {
           $this->attributes[$key] = empty(trim($value)) ? null : $value;
       }
   } ...

答案 2 :(得分:-1)

您需要将userId字段设为:

begin 
    rollback; --clear all Transactions
    execute immediate 'begin
                           savepoint SPX;
                       end;';
    rollback to savepoint SPX;
end;