Первая фиксация
This commit is contained in:
76
Mirzaev/Feip/Params/Age.php
Normal file
76
Mirzaev/Feip/Params/Age.php
Normal file
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Mirzaev\Feip\Params;
|
||||
|
||||
use Mirzaev\Feip\Error;
|
||||
|
||||
/**
|
||||
* Параметр возраста
|
||||
*
|
||||
* @property int $age Возраст
|
||||
*
|
||||
* @package Mirzaev\Feip\Params
|
||||
* @author Арсен Мирзаев <red@hood.su>
|
||||
*/
|
||||
trait Age
|
||||
{
|
||||
/**
|
||||
* Возраст: параметр
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected int $age = 0;
|
||||
|
||||
/**
|
||||
* Возраст: фильтр
|
||||
*
|
||||
* @param string|int|float $target Значение для фильтрации
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public static function age($target): ?int
|
||||
{
|
||||
// Очистка
|
||||
if ($sanitized = filter_var($target, FILTER_CALLBACK, array('options' => [self::class, 'onlyNumbers']))) {
|
||||
// Если очищение вернуло результат
|
||||
|
||||
// Проверка
|
||||
if ($sanitized !== (int) $target) {
|
||||
// Если очищенное значение не совпадает с отправленным
|
||||
new Error(200, __FUNCTION__);
|
||||
} else if (filter_var($sanitized, FILTER_VALIDATE_INT) && $sanitized > 0 && $sanitized <= 150) {
|
||||
return (int) $sanitized;
|
||||
}
|
||||
} else {
|
||||
new Error(200, __FUNCTION__);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возраст: очистка
|
||||
*
|
||||
* @param string|int|float $target Значение для очистки
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public static function onlyNumbers($target): int
|
||||
{
|
||||
// Поиск цифр
|
||||
preg_match_all('/[0-9]*/', $target, $match);
|
||||
|
||||
// Инициализация
|
||||
$result = '';
|
||||
|
||||
// Конкатанация найденных цифр
|
||||
foreach ($match[0] as $number) {
|
||||
$result .= $number;
|
||||
}
|
||||
|
||||
// В задании было сказано: для номеров тип string
|
||||
return (int) $result;
|
||||
}
|
||||
}
|
52
Mirzaev/Feip/Params/Bar.php
Normal file
52
Mirzaev/Feip/Params/Bar.php
Normal file
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Mirzaev\Feip\Params;
|
||||
|
||||
use Mirzaev\Feip\Error;
|
||||
|
||||
/**
|
||||
* Параметр bar
|
||||
*
|
||||
* @property string $bar bar
|
||||
*
|
||||
* @package Mirzaev\Feip\Params
|
||||
* @author Арсен Мирзаев <red@hood.su>
|
||||
*/
|
||||
trait Bar
|
||||
{
|
||||
/**
|
||||
* bar: параметр
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected string $bar = '';
|
||||
|
||||
/**
|
||||
* bar: фильтр
|
||||
*
|
||||
* @param string|int|float $target Значение для фильтрации
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public static function bar($target): ?string
|
||||
{
|
||||
// Очистка
|
||||
if ($sanitized = filter_var($target, FILTER_SANITIZE_STRING)) {
|
||||
// Если очищение вернуло результат
|
||||
|
||||
// Проверка
|
||||
if ($sanitized !== $target) {
|
||||
// Если очищенное значение не совпадает с отправленным
|
||||
new Error(200, __FUNCTION__);
|
||||
}
|
||||
|
||||
return (string) $sanitized;
|
||||
} else {
|
||||
new Error(200, __FUNCTION__);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
81
Mirzaev/Feip/Params/Baz.php
Normal file
81
Mirzaev/Feip/Params/Baz.php
Normal file
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Mirzaev\Feip\Params;
|
||||
|
||||
use Mirzaev\Feip\Error;
|
||||
|
||||
/**
|
||||
* Параметр baz
|
||||
*
|
||||
* @property string $baz baz
|
||||
*
|
||||
* @package Mirzaev\Feip\Params
|
||||
* @author Арсен Мирзаев <red@hood.su>
|
||||
*/
|
||||
trait Baz
|
||||
{
|
||||
/**
|
||||
* baz: параметр
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected string $baz = '';
|
||||
|
||||
/**
|
||||
* baz: фильтр
|
||||
*
|
||||
* @param string|int|float $target Значение для фильтрации
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public static function baz($target): ?string
|
||||
{
|
||||
// Очистка
|
||||
if ($sanitized = filter_var($target, FILTER_CALLBACK, array('options' => [self::class, 'phoneNumberRus']))) {
|
||||
// Если очищение вернуло результат
|
||||
|
||||
// Проверка
|
||||
if ($sanitized !== $target || !preg_match('/^7[0-9]{10}$/', $sanitized)) {
|
||||
// Если очищенное значение не совпадает с отправленным
|
||||
// или если не совпадает с паттерном "7**********" (российский номер)
|
||||
new Error(200, __FUNCTION__);
|
||||
}
|
||||
|
||||
// В задании было указано: для номеров тип string
|
||||
return (string) $sanitized;
|
||||
} else {
|
||||
new Error(200, __FUNCTION__);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* baz: очистка
|
||||
*
|
||||
* @param string|int|float $target Значение для очистки
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public static function phoneNumberRus($target): string
|
||||
{
|
||||
// Поиск цифр
|
||||
preg_match_all('/[0-9]*/', $target, $match);
|
||||
|
||||
// Инициализация
|
||||
$result = '';
|
||||
|
||||
// Конкатанация найденных цифр
|
||||
foreach ($match[0] as $number) {
|
||||
$result .= $number;
|
||||
}
|
||||
|
||||
// Конвертация под Российский номер
|
||||
$result[0] = 7;
|
||||
|
||||
// В задании было сказано: для номеров тип string
|
||||
return (string) $result;
|
||||
}
|
||||
}
|
53
Mirzaev/Feip/Params/Email.php
Normal file
53
Mirzaev/Feip/Params/Email.php
Normal file
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Mirzaev\Feip\Params;
|
||||
|
||||
use Mirzaev\Feip\Error;
|
||||
|
||||
/**
|
||||
* Параметр почты
|
||||
*
|
||||
* @property string $email Почта
|
||||
*
|
||||
* @package Mirzaev\Feip\Params
|
||||
* @author Арсен Мирзаев <red@hood.su>
|
||||
*/
|
||||
trait Email
|
||||
{
|
||||
/**
|
||||
* Почта: параметр
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected string $email = '';
|
||||
|
||||
/**
|
||||
* Почта: фильтр
|
||||
*
|
||||
* @param string|int|float $target Значение для фильтрации
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public static function email($target): ?string
|
||||
{
|
||||
// Очистка
|
||||
if ($sanitized = filter_var($target, FILTER_SANITIZE_EMAIL)) {
|
||||
// Если очищение вернуло результат
|
||||
|
||||
// Проверка
|
||||
if ($sanitized !== $target || !preg_match("/[0-9A-z]+@[A-z]+\.[A-z]+/", $sanitized)) {
|
||||
// Если очищенное значение не совпадает с отправленным
|
||||
// или если не совпадает с паттерном "email"
|
||||
new Error(200, __FUNCTION__);
|
||||
}
|
||||
|
||||
return (string) $sanitized;
|
||||
} else {
|
||||
new Error(200, __FUNCTION__);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
52
Mirzaev/Feip/Params/FirstName.php
Normal file
52
Mirzaev/Feip/Params/FirstName.php
Normal file
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Mirzaev\Feip\Params;
|
||||
|
||||
use Mirzaev\Feip\Error;
|
||||
|
||||
/**
|
||||
* Параметр имени
|
||||
*
|
||||
* @property string $first_name Имя
|
||||
*
|
||||
* @package Mirzaev\Feip\Params
|
||||
* @author Арсен Мирзаев <red@hood.su>
|
||||
*/
|
||||
trait FirstName
|
||||
{
|
||||
/**
|
||||
* Имя: параметр
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected string $first_name = '';
|
||||
|
||||
/**
|
||||
* Имя: фильтр
|
||||
*
|
||||
* @param mixed $target Значение для фильтрации
|
||||
*
|
||||
* @return array|null
|
||||
*/
|
||||
public static function firstName($target): ?array
|
||||
{
|
||||
// Очистка
|
||||
if ($sanitized = filter_var($target, FILTER_SANITIZE_STRING)) {
|
||||
// Если очищение вернуло результат
|
||||
|
||||
// Проверка
|
||||
if ($sanitized !== $target) {
|
||||
// Если очищенное значение не совпадает с отправленным
|
||||
new Error(200, __FUNCTION__);
|
||||
}
|
||||
|
||||
return (array) $sanitized;
|
||||
} else {
|
||||
new Error(200, __FUNCTION__);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
53
Mirzaev/Feip/Params/Foo.php
Normal file
53
Mirzaev/Feip/Params/Foo.php
Normal file
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Mirzaev\Feip\Params;
|
||||
|
||||
use Mirzaev\Feip\Error;
|
||||
|
||||
/**
|
||||
* Параметр foo
|
||||
*
|
||||
* @property int $foo foo
|
||||
*
|
||||
* @package Mirzaev\Params\Filters
|
||||
* @author Арсен Мирзаев <red@hood.su>
|
||||
*/
|
||||
trait Foo
|
||||
{
|
||||
/**
|
||||
* foo: параметр
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected int $foo = 0;
|
||||
|
||||
/**
|
||||
* foo: фильтр
|
||||
*
|
||||
* @param string|int|float $target Значение для фильтрации
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public static function foo($target): ?int
|
||||
{
|
||||
// Очистка
|
||||
if ($sanitized = filter_var($target, FILTER_SANITIZE_NUMBER_INT)) {
|
||||
// Если очищение вернуло результат
|
||||
|
||||
// Проверка
|
||||
if ($sanitized !== $target || !filter_var($sanitized, FILTER_VALIDATE_INT)) {
|
||||
// Если очищенное значение не совпадает с отправленным
|
||||
// или если не прошло проверку FILTER_VALIDATE_INT (но её невозможно не пройти здесь, просто так добавил)
|
||||
new Error(200, __FUNCTION__);
|
||||
}
|
||||
|
||||
return (int) $sanitized;
|
||||
} else {
|
||||
new Error(200, __FUNCTION__);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
52
Mirzaev/Feip/Params/SecondName.php
Normal file
52
Mirzaev/Feip/Params/SecondName.php
Normal file
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Mirzaev\Feip\Params;
|
||||
|
||||
use Mirzaev\Feip\Error;
|
||||
|
||||
/**
|
||||
* Параметр фамилии
|
||||
*
|
||||
* @property string $second_name Фамилия
|
||||
*
|
||||
* @package Mirzaev\Feip\Params
|
||||
* @author Арсен Мирзаев <red@hood.su>
|
||||
*/
|
||||
trait SecondName
|
||||
{
|
||||
/**
|
||||
* Фамилия: параметр
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected string $second_name = '';
|
||||
|
||||
/**
|
||||
* Фамилия: фильтр
|
||||
*
|
||||
* @param mixed $target Значение для фильтрации
|
||||
*
|
||||
* @return array|null
|
||||
*/
|
||||
public static function secondName($target): ?array
|
||||
{
|
||||
// Очистка
|
||||
if ($sanitized = filter_var($target, FILTER_SANITIZE_STRING)) {
|
||||
// Если очищение вернуло результат
|
||||
|
||||
// Проверка
|
||||
if ($sanitized !== $target) {
|
||||
// Если очищенное значение не совпадает с отправленным
|
||||
new Error(200, __FUNCTION__);
|
||||
}
|
||||
|
||||
return (array) $sanitized;
|
||||
} else {
|
||||
new Error(200, __FUNCTION__);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
56
Mirzaev/Feip/Params/Users.php
Normal file
56
Mirzaev/Feip/Params/Users.php
Normal file
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Mirzaev\Feip\Params;
|
||||
|
||||
use Mirzaev\Feip\Error,
|
||||
Mirzaev\Feip\Methods\MethodAbstract,
|
||||
Mirzaev\Feip\Params\FirstName,
|
||||
Mirzaev\Feip\Params\SecondName,
|
||||
Mirzaev\Feip\Params\Age;
|
||||
|
||||
/**
|
||||
* Параметр пользователей
|
||||
*
|
||||
* @property array $users Пользователи
|
||||
*
|
||||
* @package Mirzaev\Feip\Params
|
||||
* @author Арсен Мирзаев <red@hood.su>
|
||||
*/
|
||||
trait Users
|
||||
{
|
||||
use FirstName, SecondName, Age;
|
||||
|
||||
/**
|
||||
* Пользователи: параметр
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected array $users = [];
|
||||
|
||||
/**
|
||||
* Before
|
||||
*
|
||||
* Вызывается перед обработкой
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function usersBefore(): void
|
||||
{
|
||||
$this->ignore[] = 'first_name';
|
||||
$this->ignore[] = 'second_name';
|
||||
$this->ignore[] = 'age';
|
||||
}
|
||||
|
||||
/**
|
||||
* After
|
||||
*
|
||||
* Вызывается после обработки
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function usersAfter(): void
|
||||
{
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user