如果我在流明中发送表单,可以通过验证方法验证数据。例如,在某些控制器的某些方法中:
$this->validate($request, [
'id' => 'required|integer|exists:user',
]);
$user_id = $request->input('id');
但是变量类型的 $ user_id 仍然是字符串。是否有内置(在框架中)方法来获取我写的类型变量?在这种情况下是整数。
我现在使用 intval()。
答案 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。