2017-08-04 1 views
0

例:ユーザーエンティティがあるとします。Commandに含まれるデータが操作に必要なデータであることを確認するにはどうすればよいですか?

ユーザーは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

あなたがオブジェクト指向のソリューションを行うことができます。

旧良い本/著者はPropelのウェブサイト上の例をリストでは、あなたは私が意味するかを理解するのに役立ちます。 たとえば、Yii Frameworkでは、必要なフィールドをすべて記入しなければコマンドは実行されません。自動的に生成されるエラーメッセージ –

+0

はい、最も基本的なバリデータです。選択の枠組みにはもう少し高度なものがあると確信しています。例えば[symfonyでは注釈で行うことができます](http://symfony.com/doc/current/validation.html) –

+0

@AlexBlex私はSymfonyを使用しています。フォームの検証グループは私が必要としているものだと思います。彼らは制約を処理するでしょうからね。だから、フォームが有効になったらフォームからデータを取得するだけで、データがあると確信できます。しかし、CommandHandlerは検証を持っておらず、誰かがそれらを悪用する可能性があります。フォームインスタンスをコマンドハンドラに渡すことはできますか? – JorgeeFG

答えて

1

まあ、技術的には、はい。絶対に。

多くの理由で不正な形式になっている可能性があるため、クライアントから受け取ったすべての入力を確認する必要があります。

さらに、後で何かを行う場合は、提供されたIDを持つユーザーが実際に存在するかどうかを確認する必要があります。

しかし

そうするための便利なオプションがたくさんあります。

$keys=['id','username','password']; 
!array_diff_key(array_flip($keys), $data); // will be TRUE if all keys are there 

それとも、簡単に(ただし、いないPHPパーサ)あなたの人生にするために任意のORMまたはCRUDフレームワークを使用することをお勧めします - あなたはすべての入力をチェックするように設定します右の後、それがアクセスする前にそれを自動的に行いますデータベースを照会することができます。また、すべての着信ビットをチェックすることを煩わせることなく、ビジネスプロセスレベルの肯定的な作業を行うだけの時間を費やします。 Propel ORM

関連する問題