koda / koda
Utility classes for analyse code and invoking callables with verification of arguments and type casting
Installs: 33 718
Dependents: 2
Suggesters: 0
Security: 0
Stars: 0
Watchers: 3
Forks: 1
Open Issues: 1
Requires
- php: >=7.0
Requires (Dev)
- phpunit/phpunit: *
- satooshi/php-coveralls: dev-master
This package is auto-updated.
Last update: 2024-04-29 03:29:38 UTC
README
Koda allows to analyse code entries, call functions, methods and objects with validation of arguments and type casting. This is similar to call_user_func and call_user_func_array, but more smarter. For example calculate hypotenuse using method:
class Math { /** * @param float $leg1 (unsigned) first cathetus of triangle * @param float $leg2 (unsigned) second cathetus of triangle * @return float */ public static function hypotenuse($leg1, $leg2, $round = 2) { // ... } }
all arguments we gets from associative (or plain) array (e.g. $_GET
).
If use classic way with call_user_func
:
if(isset($_GET['leg1'])) { $leg1 = floatval($_GET['leg1']); if($leg1 < 0) { throw new LogicException("leg1 should be greater than 0"); } } else { throw new RuntimeException("No leg1 parameter"); } if(isset($_GET['leg2'])) { $leg2 = floatval($_GET['leg2']); if($leg2 < 0) { throw new LogicException("leg2 should be greater than 0"); } } else { throw new RuntimeException("No leg2 parameter"); } return call_user_func('Math::hypotenuse', $leg1, $leg2);
But if use Koda
we get one line of code:
return Koda::call('Math::hypotenuse', $_GET);
Koda find all arguments from associative (or plain) array $_GET
, change type, validate and invoke method.
Method call
/** * Method description * @param int $arg1 some integer value * @param string $arg2 some string value * @param float[] $arg3 array of floating point values * @return bool method result **/ public function doSomething($arg1, $arg2, array $arg3 = array()) { // ... }
Перед вызовом метода система проверит на наличие всех аргументов в запросе и приведет к нужному типу, согласно описанию метода. Бывает недостаточно простого приведения типа, может потребоваться привинтивная проверка самих данных. В этом случае в системе есть набор готовых проверок. Все проверки указываются так же в doc-блоке в скобках, через запятую сразу после названия аргумента:
/** * Method description * @param int $arg1 (value 0..100) некий числовой аргумент, значения которого находится между 0 и 100 включительно * @param string $arg2 (keyword, length < 100) некий стоковый аргумент, длина которого меньше 100 символов и состоит из `a-z0-9-_` * @param float[] $arg3 (count 0..10) массив чисел с плавующей точкой, массив может содержать от 0 до 10 элементов **/ public function doSomethingAction($arg1, $arg2, array $arg3) { // ... }
List of verifications (class Koda\Filter
):
unsigned
- value is unsigned integerpositive
- integer value greater than zeronegative
- integer value less than zerosmalltext
- string value less than or equal to 256 bytestext
- string value less than or equal to 64KiB.largetext
- string value less than or equal to 2MiB.date [FORMAT]
- string value is a date.FORMAT
- the format that the passed in string should be in.FORMAT
- optional parameter, by default function strtotime parse string.length RANGE
- specifies the maximum number of bytes allowed in the string value. Maybe rangelength 1..6
, equalitylength = 6
or inequalitylength <=100
.value RANGE
- числовое значение имеет ограничения по значению. Интервал задается промежуток значений1..6
так и не равеством<=100
. Например,value <100
,value 6..20
count RANGE
- массив занчений имеет ограничения по количеству элеменотов. Интервал задается промежуток значений1..6
так и не равеством<=100
. Например,count <100
,count 6..20
file
- checks that the given string is existing regular file.dir
- checks that the given string is existing directory.email [extended]
- string value is email address. Set parameterextended
that would allow the email formatJames Bond <agent007@dev.null>
.domain
- checks that the given string is domain.custom CALLBACK
- значение будет передано в указанную функцию для проверкиurl
- string value is URLip
- string value is IP addresshex
- hex string, like md5 or sha1.like PATTERN
- match string value against a glob pattern. Example:like *.tgz
mask PATTERN
- строковое значение удовлетворяет маске символов. Например,mask a-z0-9_
regexp PATTERN
- строковое значение удовлетворяет регулярному выражению. Например,regexp /^[a-z0-9_]+$/si
variants SOURCE
- значение является одним из вариантом из списка SOURCE. SOURCE может быть как обычным перечислением через пробел возможных значений параметра так и коллбеком, который возвращает массив допустимых параметров. Например,variants: one two three four
options CALLBACK
- ассоциативный массив возможных значений. Необходимое значение ищется в ключе массива.is [SOMETHING]
- более метка чем проверка, сама проверка ничего не делает и всегда возвращаетtrue
. Однако значение можно использовать для правильной отрисовки контрола.
Если указанная проверка не существует в Koda\Filter
то для валидации аргумента будет вызван метод текущего контроллера с суффиксом Validator
.
/** * Method description * @param int $author (user active) **/ public function addPost($author) { // ... } public function userValidator($user_id, $type) { // check $user_id }
Система так же воспринимает закачиваемые файлы, в этом случае тип аргумента должен быть splFileInfo
:
/** * Описание метода * @param splFileInfo $file файлы, которые будут закачины на сервер **/ public function doSomethingAction(splFileInfo $file) { // ... }