1

より高度なファイルフォーム要素、現在ロードされているアップロードされた画像を表示するウィジェット、および画像サイズの検証などを作成しています。

ファイルが検証されたら、フォーム要素自体がファイルを公的にアクセス可能なフォルダーにコピーするようにします。これは、a)画像を表示でき、b)フォーム全体が検証されない場合、ユーザーが画像を再アップロードする必要がないことを意味します。

とにかくそれは裏話ですが、基本的には、フォームがその要素を検証するときに、フォーム要素内から関数を実行する方法を理解する必要があります。フォーム要素クラスでonValidate()関数を作成するようなものです。

最も重要なのは、コントローラーにこぼれない(または可能な限り少ない)ソリューションが必要です。私はこれを実装するためのクリーンな方法を見つけるのに苦労しています。

こんなことをしたいのですが…

class File extends Element implements InputProviderInterface
{

....

public function isValid()
{
    if ( $isValid = parent::isValid() ) {
        echo "Hi there, glad you called";
    }

    return $isValid;
}
4

1 に答える 1

1

Zend\Form\Element::getValidator()関数は、検証の実行ごとに呼び出されます。

ファイルをコピーすることが懸念されるクラスを呼び出す必要があると思います。たぶん、あなたはそれをより分離させるためにイベントを起こしたいと思うでしょう。

検証とフィルタリングがInputFilterクラスの一部になりました。あなたの目標は、専用のバリデーターを作成し、それをElementにハードワイヤードすることです。

これを実現する方法の例として、Zend \ Form \ Element \ SelectInArrayValidatorを見てください。これは、そのonValidate()メソッドに組み込まれています。

于 2012-08-06T17:19:52.827 に答える