我正在使用Zend Framework 2进行一些工作,在这里我需要清理用户的输入,该输入在 html 中。我在不使用名称空间和自动加载的情况下在Plain PHP中使用了PHP整洁扩展名[请参阅此],该代码很好。
这次,我在ZF2中写了一个视图助手,就像:
<?php
namespace BlogViewHelper;
use ZendViewHelperAbstractHelper;
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行中创建一个整洁的实例,但是提出了一个错误:
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
明显地将整洁视为某些用户定义的类,找不到声明。也许ZF2中的自动加载功能会对它产生一定的影响。而且我敢肯定,请正确安装在我的机器上。
此处的问题是由于您在代码中声明的名称空间BlogViewHelper
所引起的,并且由于您在没有其完全合格的名称的情况下调用tidy
,因此PHP假设您实际上需要BlogViewHelpertidy
。
简单地做$tidy = new tidy();
,您应该没事,请注意预砍法。
您可能还想在PHP中阅读有关名称空间的更多信息:
另外,您可能需要使用根名称空间中所有其他类的所有其他类的类名称,并且通常从当前名称空间以外的名称空间中使用,或者发出适当的use
语句,如下所述:http:http:http:http://php.net/manual/en/language.namespaces.importing.php
您明智地建议阅读有关名称空间的信息
您在命名空间BlogViewHelper
中。这意味着,当您创建new tidy();
时,它正在寻找BlogViewHelpertidy
。如果一个类在全局名称空间内,则需要调用new tidy()
,与DOMDocument
相同。
如果某个类位于不同的名称空间内,则需要使用它,例如:
use SomeNameSpaceTidy;
new Tidy();
或像
一样new SomeNameSpaceTidy();