Zend Framework中的奇怪的自助载体2扰乱了整洁班的发现



我正在使用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();

最新更新