在Lumen框架中为表单数据设置变量类型。

时间:2016-02-23 12:13:36

标签: lumen

如果我在流明中发送表单,可以通过验证方法验证数据。例如,在某些控制器的某些方法中:

$this->validate($request, [
    'id' => 'required|integer|exists:user',
]);

$user_id = $request->input('id');

但是变量类型的 $ user_id 仍然是字符串。是否有内置(在框架中)方法来获取我写的类型变量?在这种情况下是整数。

我现在使用 intval()

1 个答案:

答案 0 :(得分:1)

不幸的是,据我所知,当访问该值时,无法定义Laravel / Lumen中输入的类型。

PHP将所有用户输入解释为字符串(或字符串数​​组)。

Illuminate\Validation\Validator中,确定值是否为整数的方法使用filter_var()来测试用户提供的字符串值是否符合int类型的规则。 / p>

以下是它实际做的事情:

/**
 * Validate that an attribute is an integer.
 *
 * @param  string  $attribute
 * @param  mixed   $value
 * @return bool
 */
protected function validateInteger($attribute, $value)
{
    if (! $this->hasAttribute($attribute)) {
        return true;
    }

    return is_null($value) || filter_var($value, FILTER_VALIDATE_INT) !== false;
}

唉,它没有像你看到的那样更新它检查的字段的类型。

如果您绝对需要将intval()字段的值解释为整数,我认为您使用user_id可能是最合适的选项。

使用intval()的唯一警告是,它仅限于根据您的操作系统返回整数。

从文档(http://php.net/manual/en/function.intval.php):

  

32位系统的最大有符号整数范围为-2147483648到2147483647.因此,例如在这样的系统上,intval(' 1000000000000')将返回2147483647.64位系统的最大有符号整数值是9223372036854775807.。

因此,只要您将用户群保持在少于2,147,483,647位用户,如果您使用的是32位系统,则intval()不应该遇到任何问题。我们都不是很幸运,不必担心太多用户?

开玩笑说,我提出来是因为如果您使用intval()用户输入的数字可能很大,那么您就有可能达到上限。可能不是一个大问题。

当然,对于非数字字符串输入,intval()将返回0。