【问题标题】:How do I use basePath() in a view rendered out of a library?如何在从库中呈现的视图中使用 basePath()?
【发布时间】:2013-09-08 14:54:55
【问题描述】:

我目前在 Zend 2 的库中工作,其中包括渲染视图脚本。渲染工作正常,我还可以在视图脚本中使用任何其他帮助程序,但是 basePath() 帮助程序抛出异常并显示消息:

No base path provided

我已经尝试在配置中设置 basePath,但它只是在控制器呈现的视图脚本中发生变化。 如果它是相关的,这里是呈现视图的代码:

// file: /vendor/mate/library/mate/Group/Functions/GetHtml.php
// $templateDir is either directing to /module/Application/view/group/<name>.phtml
// or to /vendor/mate/library/mate/view/group/<name>.phtml

    $map = new Resolver\TemplateMapResolver(array(
        'group/'.$type => $templateDir,
    ));
    $stack = new Resolver\TemplatePathStack(array(
        'script_paths' => array(
            $viewDir,
        )
    ));

    $resolver->attach($map)    // this will be consulted first
             ->attach($stack);

    $groupModel = new ViewModel(array(
        'elements' => $this->getGroup()->toArray(),
        'groupElement' => $groupElement,
    ));
    $groupModel->setTemplate('group/'.$type);
    $groupHtml = $renderer->render($groupModel);

有谁知道如何让 basePath 在我的视图脚本中工作?

【问题讨论】:

  • 我想知道你为什么要创建一个新的 TemplateStack。也许只是使用默认的$sl-&gt;get('viewrenderer')(也许是phpviewrenderer,我总是让自己感到困惑)。此外,我知道为什么你的 templateDir 可以是两个不同的东西,那只是糟糕的设计。交付与您的模块一起修复的模板,如果需要,只要在您的模块之后加载,它们就可以很容易地被另一个模块覆盖

标签: php zend-framework2 base-path


【解决方案1】:

必须明确设置助手的基本路径。从渲染器中抓取插件并在渲染之前先设置基本路径:

// create your view model

$renderer->plugin('basePath')->setBasePath('/foo');

// render view model now

【讨论】:

    【解决方案2】:

    问题只是因为您正在创建一个新的、单独的 PhpRenderer 实例,而不是使用已经存在的实例。

    如果您通过服务管理器获取渲染器而不是创建新的渲染器,则不需要任何此配置。

    【讨论】:

    • 好主意,但是如何让服务经理进入图书馆?
    猜你喜欢
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多