在 Zend Framework 2 中扩展 Zend\View\Helper\Url

2024-02-25

我写了一个简单的 url 视图助手,它扩展了Zend\View\Helper\Url并将其附加到ViewHelperManager:

MyNamespace\View\Helper\Url

namespace MyNamespace\View\Helper;

use Zend\View\Helper\Url as ZendUrl;

class Url extends ZendUrl {
    
    public function __invoke($name = null, array $params = array(), $options = array(), $reuseMatchedParams = false) {
        $link = parent::__invoke($name, $params, $options, $reuseMatchedParams);
        ...
        return $link;
    }
    
}

Application\Module

namespace Application;

use ...

class Module {
    
    public function onBootstrap(MvcEvent $mvcEvent) {
        $application = $mvcEvent->getApplication();
        $serviceManager = $application->getServiceManager();
        $viewHelperManager = $serviceManager->get('ViewHelperManager');
        $viewHelperManager->setInvokableClass('url', 'MyNamespace\View\Helper\Url');
        ...
    }
    
}

现在应用程序抛出异常:

致命错误:未捕获异常“Zend\View\Exception\RuntimeException”,并在 /var/www/foo/bar/vendor/zendframework/zendframework/library/Zend/View/Helper/Url.php 中显示消息“未提供 RouteStackInterface 实例” 76号线

Zend\View\Exception\RuntimeException:第 76 行 /var/www/foo/bar/vendor/zendframework/zendframework/library/Zend/View/Helper/Url.php 中没有提供 RouteStackInterface 实例

我都调试了Url类。文恩MyNamespace\View\Helper\Url使用时,方法Zend\View\Helper\Url#setRouter(...)未调用且未设置路由器。不明白为什么...

如何让它发挥作用?


没有测试过,所以我不知道它是否有效,我只是猜测:

Replace:

$viewHelperManager->setInvokableClass('url', 'MyNamespace\View\Helper\Url');

with:

$viewHelperManager->setFactory('url', function ($sm) use($serviceLocator) {
    $helper = new \MyNamespace\View\Helper\Url;
    $router = Console::isConsole() ? 'HttpRouter' : 'Router';
    $helper->setRouter($serviceLocator->get($router));

    $match = $serviceLocator->get('application')
    ->getMvcEvent()
    ->getRouteMatch();

    if ($match instanceof RouteMatch) {
        $helper->setRouteMatch($match);
    }

    return $helper;
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Zend Framework 2 中扩展 Zend\View\Helper\Url 的相关文章

  • 如何在 Zend Framework 2 中创建通用模块/控制器/操作路由?

    我想在 Zend Framework 2 中创建一个通用模块 控制器 操作路由 以便与 ZF2 MVC 架构一起使用 在 ZF1 中 默认路由的定义如下 module controller action 其中模块默认为default 控制器
  • 如何在zendframework2中使用partial

    在ZF1中 我们在layout phtml文件中使用类似的部分 this gt partial header phtml array vr gt zf2 我们如何在 ZF2 中做到同样的事情 这可以通过以下方式实现 echo this gt
  • Zend Framework 2 - 自定义表单验证

    我需要自定义表单验证 所以我写了一个类似的函数this http framework zend com manual 2 0 en modules zend validator writing validators html one 到目前
  • 在 Zend Framework 2 中处理 M-N 关系

    在 beta4 和最新的 beta5 中 DB 功能实现似乎已经基本完成 有几个教程如何使用 TableGateway 模式处理单个数据库 但似乎没有用于处理 M N 关系的教程 在 ZF1 中我们有findDependantRowset
  • 在 ZF2 中发送带有附件的电子邮件

    如何在 zf2 中发送包含 text plain text html 和附件的电子邮件 我使用此代码通过 smtp 发送电子邮件 files this gt params gt fromFiles smtp new Zend Mail Tr
  • 登录时 BjyAuthorize 未检测到角色

    我正在使用 ZF2 Doctrine ORM 和 BjyAuthorize 问题是 当我登录时 身份的 getRoles 方法返回空 class User implements UserInterface ProviderInterface
  • ZF2 Zend\Db 使用 Mysql 表达式插入/更新(Zend\Db\Sql\Expression?)

    有没有办法通过 Zend Db 和 或 TableGateway insert update 语句在 ZF2 2 0 0beta4 的当前版本中包含像 NOW 这样的 MySQL 表达式 这是邮件列表上的相关帖子 但尚未得到答复 http
  • ControllerPlugin 类中的 ZF2 getServiceLocator

    我正在尝试在插件类中获取服务定位器 实体管理器 我怎样才能得到它 在我的控制器中我得到的是这样的 public function getEntityManager if null this gt em this gt em this gt
  • Zend Framework 2 的多个表

    我是 Zend Framework 2 的新手 我成功完成了 ZF2 的专辑教程 现在我想仅显示数据库中多个表中的某些数据 我有一个简单的数据库设置 其中包含表格 例如人员 书籍 状态等 数据库应该做什么并不重要 我想知道是否有一个教程可以
  • 如何启动一个新的大型 ZF2 项目?

    我将使用 ZF2 创建一个新项目 事实上 我必须升级 ZF1 项目 但我决定从头开始 我的项目非常庞大 已经被来自世界各地的志愿者翻译成 10 种不同的语言 我遇到的困难是分析 ZF2 告诉我要遵循的模块结构 该软件允许 ISP 领域的中小
  • 具有多个 FROM 表的 TableGateway

    我想做一个简单的INNER JOINZend2 中的两个表之间 具体来说 我想在 Zend2 中这样做 SELECT FROM foo bar WHERE foo foreign id bar id 我有一个FooTable class F
  • Ubuntu 16.04 - Apache 2.4.18 - 请求 URI 太长

    我试图从 Google 图片搜索结果中保存图像 但是当我在查询字符串参数中发送图像的 src 时 会出现以下错误 Request URI Too Long The requested URL s length exceeds the cap
  • ZF2 - 从路线生成 URL

    我无法弄清楚在 zend 2 中从我想要的任何地方生成 Url 我得到了动作和控制器 所以我尝试这个 this gt url myControllerName array action gt myActionName 但这返回一个对象 我只
  • 使用 Zend Framework 2 生成 PDF 文件 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我现在开始学习 ZF2 并注意到 zend Framework 2 上没有 Zend Pdf 或类似内容 如何在此版本的框架上创建 pdf
  • 压缩 zend Framework 2 的 html 输出

    我目前正在 PHP 5 4 4 上使用 Zend Framework 2 beta 开发个人 web 应用程序以用于自学目的 我想知道是否可以在 html 输出发送到浏览器之前拦截它 以便通过删除所有不必要的空格来缩小它 我怎样才能在ZF2
  • Zend Framework 2 将变量传递给模型

    我目前正在开发一个多语言网站 对于多语言部分 我使用翻译器 poedit 我将所选语言存储在会话中 效果很好 模块 php public function onBootstrap MvcEvent e session new Contain
  • Zend Framework 2 重写 URL

    我有一个 Zend Framework 2 应用程序 我希望使用 htaccess 重写一些 URL htaccess 文件位于我的公用文件夹中 我已经验证了一个简单的重写规则 它将所有 testurl 重写为 test php Rewri
  • Zend Framework 2相册教程发生404错误请求的URL无法通过路由MAMP OSX匹配

    刚刚也在 IRC 频道 ZFTalk 上发布了这个 希望我能得到一些关于 ZF2 ZF2 专辑教程 使用 MAMP 的 OSX 的帮助 骨架框架 主页正在运行 问题 完成第 8 5 节 列出专辑 后 您用一些代码填充 module Albu
  • 404 路由无法匹配请求的 URL

    我刚刚开始学习zend 框架 questions tagged zend framework并遵循此用户指南 http framework zend com manual 2 3 en index html 我能够成功安装zend skel
  • 使用原则 2 的 UniqueEntity

    我正在使用 Zend Framework 2 并且创建了一个用户实体 现在我试图使用户名字段唯一 但是出现以下错误 Semantical Error The annotation UniqueEntity in class User Ent

随机推荐