1

Zend Framework 2 を使用していくつかの作業を行っています。ここでは、 Htmlにあるユーザーの入力をクリーンアップする必要があります。名前空間と自動読み込みを使用せずにプレーンphpでphp tidy拡張[これを参照]を使用したことがありますが、そのコードはうまくいきます。

今回は、zf2 で次のようなビュー ヘルパーを作成しました。

<?php
namespace Blog\View\Helper;
use Zend\View\Helper\AbstractHelper;

class TidyHtml extends AbstractHelper
{
    public function __invoke($userHtml){
    $config = array(
               'indent'         => true,
               'output-xhtml'   => true,
               'wrap'           => 200);

    $userHtml = '<div id="wrapper">'.$userHtml.'</div>';
    $tidy = new tidy();
    $tidy->parseString($userHtml,$config,'utf8');

    $tidy->cleanRepair();
    $dom = new DOMDocument();
    $dom->loadHTML($tidy);

    $node = $dom->getElementsById("wrapper");
    $newdoc = new DOMDocument();
    $cloned = $node->item(0)->cloneNode(TRUE);
    $newdoc->appendChild($newdoc->importNode($cloned,TRUE));
    return $newdoc->saveHTML();
    }
}

14 行目で tidy のインスタンスを作成したいのですが、エラーが発生しました:

PHP Fatal error:  Class 'Blog\\View\\Helper\\tidy' not found in /var/www/zf2-tutorial
/module/Blog/src/Blog/View/Helper/TidyHtml.php on line 14

どうやらphpはtidyをユーザー定義クラスとして扱い、その宣言を見つけることができません。zf2 のオートローディング機能が何らかの影響を与えている可能性があります。tidy2.0 拡張機能が私のマシンに適切にインストールされていると確信しています。

4

2 に答える 2

1

ここでの問題はBlog\View\Helper、コードで宣言されている名前空間にいるという事実が原因であり、完全修飾名なしでクラスを呼び出すためtidy、PHP は実際にBlog\View\Helper\tidy.

単に行うだけで問題$tidy = new \tidy();ないはずです。先頭にスラッシュが追加されていることに注意してください。

PHP の名前空間について詳しく読むこともできます: http://php.net/manual/en/language.namespaces.php

また、ルート名前空間からの他のすべてのクラス、および一般に現在の名前空間以外の名前空間からの完全修飾クラス名を使用するか、useここで説明されているように適切なステートメントを発行する必要がある場合があります: http://php. net/manual/en/language.namespaces.importing.php

于 2012-12-18T16:19:11.600 に答える
0

名前空間について読むことをお勧めします

あなたは名前空間の中にいますBlog\View\Helper。これは、 を作成するときに をnew tidy();探していることを意味しますBlog\View\Helper\tidynew \tidy()クラスがグローバル名前空間内にある場合は、 と同じように を呼び出す必要がありますDOMDocument

クラスが別の名前空間内にある場合は、次のように使用する必要があります。

use Some\Name\Space\Tidy;
new Tidy();

またはそれを好きにする

new \Some\Name\Space\Tidy();
于 2012-12-18T16:20:11.157 に答える