Php Zend 2视图辅助程序-使用抽象辅助程序呈现另一个辅助程序内容

Php Zend 2视图辅助程序-使用抽象辅助程序呈现另一个辅助程序内容,php,zend-framework,zend-framework2,view-helpers,Php,Zend Framework,Zend Framework2,View Helpers,我已经实现了一个名为contentByKey的Zend视图助手,它在我的CMS引擎中呈现一些HTML。我想实现它,以便这个视图帮助器是在我的标记中调用的唯一帮助器(传递一个键以在DB中查找内容)。当它试图构建HTML内容时,它需要能够在View Helper类中分派另一个View Helpers render。我的类实现了AbstractHelper。见下文: class ContentByKey extends AbstractHelper{ public function __invoke

我已经实现了一个名为contentByKey的Zend视图助手,它在我的CMS引擎中呈现一些HTML。我想实现它,以便这个视图帮助器是在我的标记中调用的唯一帮助器(传递一个键以在DB中查找内容)。当它试图构建HTML内容时,它需要能够在View Helper类中分派另一个View Helpers render。我的类实现了AbstractHelper。见下文:

class ContentByKey extends AbstractHelper{

public function __invoke($key){
    /* 1. Fetch content from DB and check type */

    /* 2. Content type = "foo";*/

    /* 3. NEEDED LOGIC - Invoke fooHelper here (needs to process additional logic before rendering so simply rendering a different script isnt enough) */
}

如果这不是实现我所需的最佳方法,我很乐意接受任何其他建议。

视图帮助器由视图帮助器插件管理器(或者,
Zend\view\HelperPluginManager
)构建。此管理器在每个视图辅助对象中注入视图呈现器对象(请参见上的
getView()
/
setView()
)。它使您能够呼叫其他帮助者:

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

class ContentByKey extends AbstractHelper
{
    public function __invoke($key)
    {
        // fetch data from database
        // $text = ...

        // example: translate this text via the translator

        $translated = $this->getView()->translate($text);
        return $translated;
    }
}

视图助手由视图助手插件管理器(或,
Zend\view\HelperPluginManager
)构造。此管理器在每个视图辅助对象中注入视图呈现器对象(请参见上的
getView()
/
setView()
)。它使您能够呼叫其他帮助者:

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

class ContentByKey extends AbstractHelper
{
    public function __invoke($key)
    {
        // fetch data from database
        // $text = ...

        // example: translate this text via the translator

        $translated = $this->getView()->translate($text);
        return $translated;
    }
}

是否要在
\u invoke
中调用另一个视图帮助程序?是,并呈现该视图帮助程序内容而不是ContentByKey's将所需的视图帮助程序导入到您自己的视图帮助程序可以提供一个示例@Sam吗?是否要在
\u invoke
中调用另一个视图帮助程序?是,并呈现视图帮助器内容而不是ContentByKey’将所需的视图帮助器导入您自己的视图帮助器能否提供一个示例@Sam?谢谢Jurian,这很完美:)Jurian,我意识到我需要动态执行帮助器(事先不知道将返回哪个帮助器)。你能提供一个这样做的方法吗?在您的示例中,您使用Translator作为固定帮助器,但my helper根据从DB中提取的内容而有所不同(type字段具有帮助器的名称)。我看到有一个插件代理-$view->plugin('helperName'),只要您的帮助器实现了_invoke方法,就可以使用它。也许你有更好的解决方案?@Blyde
\uu invoke($helpername,$morevars…
),然后在
$this->$helpername($text)
中运行,如果我没有弄错的话now@Sam谢谢你,我玩过了,最后也玩了上面的:)谢谢你,朱丽安,这太完美了:)朱丽安,我意识到我需要动态地执行helper(事先不知道将返回哪个helper)。你能提供一个这样做的方法吗?在您的示例中,您使用Translator作为固定帮助器,但my helper根据从DB中提取的内容而有所不同(type字段具有帮助器的名称)。我看到有一个插件代理-$view->plugin('helperName'),只要您的帮助器实现了_invoke方法,就可以使用它。也许你有更好的解决方案?@Blyde
\uu invoke($helpername,$morevars…
),然后在
$this->$helpername($text)
中运行,如果我没有弄错的话now@Sam谢谢你,我玩了很多,最后也玩了上面的游戏:)
<?php
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

use MyModule\View\Helper\ContentByKey;

class ContentByKeyFactory implements FactoryInterface
{
    public function createService(ServiceLocatorInterface $serviceLocator)
    {
        $viewManager = $serviceLocator->get('ViewHelperManager');
        $translate   = $viewManager->get('translate');

        $helper = new ContentByKey($translate);
        return $helper;
    }
}