1

私は Silex と Symfony を初めて使用し、symfony Form コンポーネントを使用してフォームを作成しようとしています。それは正常に機能していますが、検証/サニタイズに関してはどうすればよいかわかりません。

もちろん $app->escape($data) メソッドは知っていますが、私のニーズに合わないようです。

$form->isValid() メソッドを呼び出す前に、送信されたデータから html タグをエスケープしたいと思います。HTMLタグでテキストを無効にしたくありません。テキストからそれらをエスケープ/削除してから、取得した値を検証します。

したがって、基本的には、元の値または使用する代わりに、エスケープされた値をフォームに与えたいと考えています。

私の問題は、html タグを削除した後に送信されたテキストが空の場合にのみエラー メッセージを表示したいということです。

パッケージでhtml検証について何も見つからなかったので、カスタム制約を書くことを考えましたが、その場合、最初に検証で、次にデータを保存する前に、2回フィルター/エスケープする必要がありました。

私はこのようなことを達成したいと思います:

if ($request->getMethod() == 'POST') {            
  $comment = $request->get('comment');
  if($comment) {
    foreach($comment as &$value) {
      $value = $app->escape($value);
    }

    $cleared = new Request(array(), array('comment' => $comment));

    $form->bindRequest($cleared);
    if ($form->isValid()) {
      var_dump($form->getData());
    }
  }
}

ありがとう。

4

2 に答える 2

3

$app->escape()はhtmlspecialchars()の単なるショートカットです。html タグを削除するにはstrip_tags()関数を使用する必要があります。

私の問題は、html タグを削除した後に送信されたテキストが空の場合にのみエラー メッセージを表示したいということです。

$form->get('FILED_NAME')->addError(new Form\FormError('ERROR'));

例えば ​​:

if ($request->getMethod() == 'POST') {            
  $comment = $request->get('comment');
  if($comment) {
    $emptyCM = false;
    foreach($comment as &$value) {
      $value = strip_tags($value);
      if (empty($value)) $emptyCM = true;
    }
    if ($emptyCM) 
      $form->get('comment')->addError(new Form\FormError('my custom error message'));

    $cleared = new Request(array(), array('comment' => $comment));

    $form->bindRequest($cleared);
    if ($form->isValid()) {
      var_dump($form->getData());
    }
  }
}
于 2012-10-06T23:41:39.573 に答える