示例,假设您有一个用户实体。
用户有id
,username
,password
。
id在数据库中自动生成。
在UpdateUserCommand
中,应使用相同的数据。
在UpdateUserCommandHandler
中,我们需要ID才能进行查询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 :(得分:1)
从技术上讲,是的。绝对强>
您必须检查从客户端收到的每个输入,因为它可能由于很多原因而导致格式错误。
此外,您需要检查具有提供ID的用户是否确实存在,如果您稍后要对其进行操作。
<强>然而强>
有很多方便的选择。
E.g
var array = [{},{},{}];
var copy = _.map(array, _.clone);
或者您可能希望使用任何ORM或CRUD框架来使您的生活(不是PHP解析器)更容易 - 在您将其配置为检查所有输入之后,它将在访问和查询数据库之前自动执行,而且你只会花时间做正面的业务流程级别的工作,而不必费心检查每一个输入位。
Propel网站上的旧好书/作者列表示例将帮助您理解我的意思:Propel ORM