Структура проверки ввода с скучным именем
Изменение
Проверка ввода является важной задачей в любом веб -приложении, но остается чрезвычайно утомительной задачей. Это заменяет смешенные проверки на правильную структуру данных, которая четко определяет требуемые и необязательные входы.
Дизайн переосмысливает идею дизайна, управляемого API, где каждая конечная точка API является его собственным объектом, однако явно не требует этого формата
Необработанный вход преобразуется в безопасные данные в двух основных шагах:
Способность отвечает за преобразование необработанной входной строки в ассоциативный массив. Если ваше приложение структурировано для этого, этот шаг можно полностью пропустить.
Валидация является наиболее полезной частью библиотеки - принятие определенного набора дополнительных и необходимых параметров и их типов, и сравнение входных значений со спецификацией. Реализация предотвращает полностью распространять неверные данные; Невозможно создать объект SafeInput (который будет использовать ваше приложение) из неверных данных!
После завершения этого процесса возвращается объект SafeInput , который содержит данные в соответствии со спецификацией, определяемым объектом реализации ValidationInterface (отсутствующие необязательные значения являются нулевыми).
Поскольку эта библиотека существует для предоставления доверительных данных, она активно помешает вам отгонять их; Например, использование isset или empty в структуре данных вызовет исключение. Опыт автора заключается в том, что действие, неспособное доверять вашим проверенным данным, является анти-паттерном и кодовым запахом; Если вы настаиваете на этом, это не правильный инструмент для вас. Принудительное доверие, как это, имеет тенденцию предотвратить проходную документацию, кроме реальности.
Основной пример следует:
some_controller_file.php
<?php
// This would be in its own file
use Firehed Input Interfaces ValidationInterface ;
use Firehed Input Containers SafeInput ;
use Firehed Input Objects as O ;
class Endpoint
implements ValidationInterface {
public function getOptionalInputs () {
return [
' bar ' => new O Text (),
' baz ' => ( new O Text ())-> setDefaultValue ( ' my baz ' ),
];
}
public function getRequiredInputs () {
return [
' foo ' => new O Text (),
];
}
public function execute ( SafeInput $ i ) {
// ... do some magic
// $i['foo'] will be a string
// $i['bar'] will be a string or null, since it was optional
// $i['baz'] will be a string or 'my baz', since it was an optional with a default value
}
} index.php
<?php
// This is the core of your Front Controller
use Firehed Input Containers RawInput ;
use Firehed Input Parsers URLEncoded ;
// The endpoint should be detrmined by your router
$ endpoint = new Endpoint ();
// The parser should be determined by the Content-Type header
$ parser = new URLEncoded ();
try {
$ input = ( new RawInput ( " foo=world " ))
-> parse ( $ parser )
-> validate ( $ endpoint );
$ endpoint -> execute ( $ input );
} catch ( Firehed Input Exceptions InputException $ e ) {
// The input contained invalid data
} catch ( Exception $ e ) {
// Do any logging, error responses, etc.
echo $ e ;
}