Пример, предположим, у вас есть сущность пользователя.
Пользователь имеет id
, username
, password
,
Идентификатор автоматически генерируется в базе данных.
В UpdateUserCommand
, те же данные должны быть использованы.
В UpdateUserCommandHandler
нам нужен идентификатор, чтобы сделать запрос update users set password ... where id = :id
,
Но как я могу убедиться, что у меня есть данные, необходимые для построения этого запроса? Это единственное, почему много if (!somedata) trow new MissingSomeDataException()
?
Пример:
if (!isset($data['id'])) {
throw new Exception('ID is missing');
if (!isset($data['username'])) {
throw new Exception('Username is missing');
if (!isset($data['password'])) {
throw new Exception('password is missing');
$id = (int) $data['id'];
if (!isset($data['id'])) {
throw new Exception('ID is invalid');
$query = $this->entityManager->createQuery('update Users u ... where u.id = :id)
$this->entityManager->execute($query, $params);
Ну, технически, да. Определенно.
Вы должны проверять каждый вход, который вы получаете от клиента, потому что он может быть искажен по многим причинам.
Более того, вам нужно будет проверить, существует ли на самом деле пользователь с предоставленным идентификатором, если вы собираетесь что-то сделать с ним позже.
тем не мение
Есть много удобных вариантов для этого.
$keys=['id','username','password'];
!array_diff_key(array_flip($keys), $data); // will be TRUE if all keys are there
Или вы можете захотеть использовать любую ORM или CRUD-среду, чтобы упростить вашу жизнь (но не PHP-парсер) — сразу после того, как вы сконфигурируете его для проверки всех входных данных, он сделает это автоматически перед доступом и запросом базы данных, и вы тратить время только на выполнение положительной работы на уровне бизнес-процессов, не заботясь о проверке каждого входящего бита.
Пример старой доброй книги / списка авторов на веб-сайте Propel поможет вам понять, что я имею в виду: Propel ORM
Других решений пока нет …