koda / koda
Utility classes for analyse code and invoking callables with verification of arguments and type casting
Installs: 33 731
Dependents: 2
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 1
Open Issues: 1
pkg:composer/koda/koda
Requires
- php: >=7.0
Requires (Dev)
- phpunit/phpunit: *
- satooshi/php-coveralls: dev-master
This package is auto-updated.
Last update: 2025-10-29 01:51:01 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 = 6or inequalitylength <=100.value RANGE- числовое значение имеет ограничения по значению. Интервал задается промежуток значений1..6так и не равеством<=100. Например,value <100,value 6..20count RANGE- массив занчений имеет ограничения по количеству элеменотов. Интервал задается промежуток значений1..6так и не равеством<=100. Например,count <100,count 6..20file- 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 parameterextendedthat 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 *.tgzmask PATTERN- строковое значение удовлетворяет маске символов. Например,mask a-z0-9_regexp PATTERN- строковое значение удовлетворяет регулярному выражению. Например,regexp /^[a-z0-9_]+$/sivariants SOURCE- значение является одним из вариантом из списка SOURCE. SOURCE может быть как обычным перечислением через пробел возможных значений параметра так и коллбеком, который возвращает массив допустимых параметров. Например,variants: one two three fouroptions 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) { // ... }