Как я могу убедиться, что данные, содержащиеся в Command, необходимы для выполнения операции?

Пример, предположим, у вас есть сущность пользователя.

Пользователь имеет 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);

0

Решение

Ну, технически, да. Определенно.

Вы должны проверять каждый вход, который вы получаете от клиента, потому что он может быть искажен по многим причинам.

Более того, вам нужно будет проверить, существует ли на самом деле пользователь с предоставленным идентификатором, если вы собираетесь что-то сделать с ним позже.

тем не мение

Есть много удобных вариантов для этого.

$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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]