0

XMLファイルをアップロードするフォームがあります。フォームが送信された後、XMLファイル内のタグのペアの内容を確認する必要があります。タグの内容が予想と異なる場合は、フォームの横にエラーが表示されます。

このコードを整理する方法が正確にわかりません。何か助けがありますか?

タグ:事前検証、事後検証

4

1 に答える 1

3

このチェックを実行する場所はいくつかあります。

  • フォームを作成するアクションで
  • カスタムバリデーターを使用してフォームで
  • モデルクラスで(これはあまりお勧めできません...)

フォームを別の場所で再利用する必要がある場合、xml をチェックするロジックを再実装する必要がないため、カスタム バリデーターを好みます。

したがって、sfForm クラスで、カスタム バリデーターをファイル ウィジェットに追加します。

class MyForm extends sfForm
{
  public function configure()
  {
    // .. other widget / validator configuration

    $this->validatorSchema['file'] = new customXmlFileValidator(array(
      'required'  => true,
    ));

そして、あなたの新しいバリデータ内/lib/validator/customXmlFileValidator.class.php

// you extend sfValidatorFile, so you keep the basic file validator
class customXmlFileValidator extends sfValidatorFile
{
  protected function configure($options = array(), $messages = array())
  {
    parent::configure($options, $messages);

    // define a custom message for the xml validation
    $this->addMessage('xml_invalid', 'The XML is not valid');
  }

  protected function doClean($value)
  {
    // it returns a sfValidatedFile object
    $value = parent::doClean($value);

    // load xml file
    $doc = new DOMDocument();
    $doc->load($this->getTempName());

    // do what ever you want with the dom to validate your xml
    $xpath = new DOMXPath($doc);
    $xpath->query('/my/xpath');

    // if validation failed, throw an error
    if (true !== $result)
    {
      throw new sfValidatorError($this, 'xml_invalid');
    }

    // otherwise return the sfValidatedFile object from the extended class
    return $value;
  }
}

キャッシュをクリアすることを忘れないでください。問題php symfony ccありません。

于 2012-10-08T21:29:31.330 に答える