Нужно ли бросать исключение, в случаях, когда данные не прошли валидацию?
Или достаточно просто занести код и сообщение ошибки в массив errors и при выводе работать с ним?
Полезна ли информация с Исключений при валидации во время дебагга?Да, так вы получаете stacktrace, помимо сообщения об ошибке.
Работа с ошибочными данными может вызвать ошибку непосредственно при их обработке.
public function loginAction(Request $request) : Response
{
try {
$userName = $request->request->get('userName');
$password = $request->request->get('password');
Assert::assert($userName, 'userName')->match('/^[\a-z\d]{3,32}$/i');
Assert::assert($password, 'password')->lengthBetween(6, 32);
} catch (\Throwable $exception) {
return new Response($exception->getMessage(), Response::HTTP_BAD_REQUEST);
}
try {
// Your business logic here
return Response();
} catch (\Throwable $exception) {
$this->get('logger')->error($exception->getMessage(), ['exception' => $exception]);
return new Response('Could not login', Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
class ValidationException extends Exception
{
/**
* Validation error messages.
*
* @var array
*/
protected $errors = [];
/**
* Constructor.
*
* @param array $errors
*/
public function __construct($errors)
{
$this -> errors = $errors;
}
/* геттер для свойства $errors */
}
Обязательно ли создавать экземпляр? Или можно обойтись статическими методами
echo Form::getError();
. Откуда статический метод будет получать информацию об ошибке формы? Как он будет отличать ошибки одной формы от другой?Единственное что знаю, экземпляр надо создавать тогда, когда он оперирует уникальными даннымиЭкземпляр нужен тогда, когда у него есть какое-то собственное состояние (ошибки валидации, например). У двух объектов состояние может совпадать (то есть быть неуникальным), но это не значит, что в следующий момент один из них не изменится.
И разумно ли использовать один QueriBuilder в таком случае и отказаться от ActiveRecords, в частности при использовании запросов с JOIN, UNIONДа. Это нормальная практика. Не надо с помощью ORM пытаться делать большие запросы. ORM - для тривиальных вещей.
Модель - представление предмета, системы...
Не могу до конца понять как использовать модели, где они хранятся.