1

ファイルをアップロードするための 2 つのフィールドを含むフォームがあります。次の点を実行する必要があります。

  • フォームを検証します。
  • ファイルを別のディレクトリに移動します。
  • 移動したファイルを処理します。
  • 処理結果を返します。

また、上記のいずれかが失敗した場合は、エラー メッセージを返さなければなりません。私はそれをより柔軟に行う方法を混乱させています。コントローラーですべてを実行したくありません。

FOSUserBundle のようにフォーム ハンドラー、フォーム モデル、フォーム タイプを作成し、validation.yml でフォーム モデルに検証ルールを追加しました。フォームの検証は正常に機能します。

この問題にイベントディスパッチャーを使用する考えがあります。フォームの検証後、イベント リスナーに通知できます。

どう思いますか?

4

1 に答える 1

2

場合によります。

さまざまなアクションを実行する必要があるためにイベントにサブスクライブする必要がある場合 (サポートに電子メールを送信する、ゴミを片付ける、データベースに障害ログを書き留めるなど)、イベント ディスパッチャーを使用します。ただし、エラーを表示するだけの単純なものであれば、代わりに例外を使用するのが理にかなっています。

if ($form->isValid()) { 
    try { 
        $entity->handle(); 
    } catch (FileHandleException $e) { 
        ... 
    } catch (RuntimeException $e) {
        ... 
    }
}

別のオプションは、「移動したファイルの処理」が何であるかによって異なります。それが検証の一部であり (たとえば、有効な ssh キーであることを確認するためにそれらを処理する)、ビジネス ロジックではない場合、新しいバリデーターを作成すると、フォーム検証の一部になります。

于 2012-09-14T21:03:12.983 に答える