Создание методов
Создание методов сложный и ответственный процесс. Помимо функциональности, методы должны обеспечивать:
- Типизацию входных параметров
- Фильтрацию параметров
- Присвоение параметров по умолчанию
- Валидацию обязательных парамеров
- Валидацию типизации, существования сущностей
- Ответ в случае ошибки
- Обработка данных
- Ответ в случае успеха
Практика
Разберем весь процесс на примере создания метода, который получит пользователя по e-mail
1. Создание тела метода
Откроем модель App\Models\Users и создадим тело метода:
public static function getUserByEmail($params)
{
TDD::debug($params);
}
Название метода должно быть обязательно в регистре camelCase и отражать весь смысл метода, в нашем случае это getUserByEmail
В качестве единственного параметра, передается $params - массив в котором будет множество параметров
TDD::debug($params) - это метод дебагера, он будет выводить все параметры в тестах
2. Создаем тест под метод
Создаем файл: /app/tests/Users/Users/getUserByEmail.php
Содержимое:
<?php
include $_SERVER['DOCUMENT_ROOT'] . '/app/configuration/init.php';
use App\Models\Users\Users as User;
\Prologue\Framework\Tests\TDD::start(function () {
User::getUserByEmail(
[
'email' => 'ivan@gmail.ru'
]
);
});
Был создан классический тест, в качестве параметра мы передаем 'email' => 'ivan@gmail.ru'
Запустим тест в браузере http://вашЛокальныйПроект/app/tests/Users/Users/getUserByEmail.php
Тест запущен:

Интерфейс теста отобразил тело тестируемой функции и наши параметры.
3. Задаем типы данных для параметров
Все входящие параметры нужно типизировать и протримить:
public static function getUserByEmail($params)
{
$params['email'] = (string)trim($params['email']);
TDD::debug($params);
}
4. Подключаем ошибки
Нужно подключить ошибки, которые в дальнейшем будут использоваться в валидации. Для этого, используйте метод TDD::setErrors(массивСОшибками)
public static function getUserByEmail($params)
{
$params['email'] = (string)trim($params['email']);
TDD::debug($params);
TDD::setErrors('userGetUserByEmail');
}
TDD::setErrors('userGetUserByEmail') - в качестве параметра указали название подсистемы user и название метода GetUserByEmail
Этот метод позволяет подключить ошибки из файла: /app/language/ru/errors.php
Откройте файл и создайте в нем массив userGetUserByEmail с ошибками:
paramEmailRequired |
Не указан e-mail! |
invalidEmail |
Не корректный e-mail! |
userNoExists |
Пользователь с указанным e-mail не существует! |

Теперь метод имеет коды ошибок и языковые строки к ним.
5. Валидация
Создадим метод для валидации, в случае ошибко в этом методе - вернем их
public static function getUserByEmail($params)
{
$params['email'] = (string)trim($params['email']);
TDD::debug($params);
TDD::setErrors('userGetUserByEmail');
if ($validateErrors = self::getUserByEmail__validate($params)) {
return TDD::debug($validateErrors);
}
}
private static function getUserByEmail__validate($params)
{
}
getUserByEmail__validate() - метод validate название не спроста так. Правило простое: Название родительского метода: getUserByEmail + __ + название метода validate
Обработка обязательных полей в методе getUserByEmail__validate()
private static function getUserByEmail__validate($params)
{
if (!$params['email']) {
return TDD::debug(
[
'status' => 'error',
'errorCode' => 'paramEmailRequired',
]
);
}
}
Проверка корректности e-mail
if (!filter_var($params['email'], FILTER_VALIDATE_EMAIL)) {
return [
'status' => 'error',
'errorCode' => 'invalidEmail',
];
}
Если передать не e-mail, система вернет ошибку:
data : Array
(
[status] => error
[errorCode] => invalidEmail
[errorMessage] => Не корректный e-mail!
)

6. Полезное действие
После того, как валидация описана и пройдена, можно делать полезное действие, в нашем случае нужно достать пользователя с указанным e-mail из модели.
Получаем пользователя и выводим его в тест:
$user = self::find(['email' => $params['email']])->getOne()->data;
TDD::debug($user);

Запускаем тест и видим что вернулся NULL - потому что такого пользователя нет в базе.
Напишем обработку данной ошибки:
if (!$user) {
return TDD::debug(
[
'status' => 'error',
'errorCode' => 'userNoExists',
]
);
}
Занесем пользователя с e-mail который в параметрах в базу пользователей и запустим повторно тест:

Метод вернул нам пользователя.
7. Обработка данных
Обработаем данные в отдельном методе:
private static function getUserByEmail__handle($user)
{
return [
'id' => (int)$user['id'],
'name' => (string)$user['name'],
'email' => (string)$user['email'],
'phone' => (string)$user['phone'],
];
}

8. Вернем статус успеха и пользователя
return TDD::debug(
[
'status' => 'ok',
'user' => $user
]
);
Запустим тест:

Готово! Теперь нужно протестировать метод на разных данных.