Фильтр int
из phalcon удаляет все символы, кроме цифр, знака плюс и минус.
Этот фильтр внутренне основан на функции PHP filter_var . Поэтому, если мы используем filter_var
, мы можем написать фильтр, который возвращает значение по умолчанию как null
, если фильтр не работает
<?php
function filter($input) {
$options = array(
'options' => array(
'default' => NULL, // value to return if the filter fails
),
);
return filter_var($input, FILTER_VALIDATE_INT, $options);
}
var_dump(filter(1)); // Prints 1
var_dump(filter("1")); // Prints 1
var_dump(filter(0)); // Prints 0
var_dump(filter("")); // Prints NULL
Однако Phalcon не позволяет отправлять все параметры, которые filter_var
на самом деле поддерживает. Так что правильный способ решить эту проблему состоит в том, чтобы реализовать свой собственный фильтр и поместить код выше.
Но если вы чувствуете себя ленивым, ленивый способ решить эту проблему - реализовать правильно, просто используйте этот код вместо сохранения в базе данных.
$input = $input === "" ? null : (int) $input;
Однако я рекомендую вам сделать это правильно, внедрив Phalcon\FilterInterface
, потому что он может использовать повторно.