【问题标题】:Using ZendPdf in Zend Framework 2在 Zend Framework 2 中使用 ZendPdf
【发布时间】:2014-12-01 01:13:09
【问题描述】:

我正试图围绕 zend 框架 2 和它的模块系统。我在入门指南中的骨架应用程序工作。我现在想使用 ZendPdf 加载现有的 pdf 文件并使用它。到目前为止,我已经完成了以下操作:

  • 使用 composer 将 ZendPdf 下载并安装到我的骨架应用程序中
  • 将 ZendPdf 添加到我的 application_config.php 中
  • 添加了一个简单的控制器操作来创建一个新的 ZendPdf 类并加载到一个文档中
  • 我还为控制器操作创建了一个视图。

当我在控制器中调用操作时,我会收到以下错误

Fatal error: Uncaught exception 'Zend\ModuleManager\Exception\RuntimeException' with message 'Module (ZendPdf) could not be initialized

显然,从错误中,我需要将 zendpdf 添加到 module_config.php 以便 ModuleManager 可以拾取它。这是我迷路了。我不知道如何在配置文件中配置zendpdf。这是我目前所拥有的:

module.config 在相册模块中

return array(
'controllers' => array(
    'invokables' => array(
        'Album\Controller\Album' => 'Album\Controller\AlbumController',
    ),
),
// Routes for 
'router' => array(
    'routes' => array(
        'album' => array(
            'type'    => 'segment',
            'options' => array(
                'route'    => '/album[/:action][/:id]',
                'constraints' => array(
                    'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    'id'     => '[0-9]+',
                ),
                'defaults' => array(
                    'controller' => 'Album\Controller\Album',
                    'action'     => 'index',
                ),
            ),
        ),
    ),
),
'view_manager' => array(
    'template_path_stack' => array(
        'album' => __DIR__ . '/../view',
    ),
),
'zendpdf' => array() /* what to do here */
);

这是我的 AlbumController

中的控制器操作
public function viewPdfAction()
{
  $pdf = ZendPdf::load('/tmp/pdf_report.pdf');
}

这是 application.config

<?php
   return array(
     'modules' => array(
       'Application',
       'Album',
       'AlbumRest',
       'ZendPdf'
     ),
     'module_listener_options' => array(
        'config_glob_paths'    => array(
        'config/autoload/{,*.}{global,local}.php',
     ),
      'module_paths' => array(
          './module',
          './vendor',
     ),
  ),
);

我一直在阅读文档,但就是不明白。我需要朝着正确的方向前进。

【问题讨论】:

    标签: php zend-framework2


    【解决方案1】:

    使用 Andy 的线索,我发现这是行得通的。

    通过 composer 安装 ZendPdf。使用 composer 将使 ZF2 自动自动库。下面是我使用的composer.json文件

    {
        "repositories": [
          {
            "type": "composer",
            "url": "http://packages.zendframework.com/"
          }
        ],
        "name": "zendframework/skeleton-application",
        "description": "Skeleton Application for ZF2",
        "license": "BSD-3-Clause",
        "keywords": [
            "framework",
            "zf2"
        ],
        "homepage": "http://framework.zend.com/",
        "require": {
            "php": ">=5.3.3",
            "zendframework/zendframework": "2.*",
            "zendframework/zendpdf": "*"
        }
    }
    

    在你的控制器中导入 ZendPdf 命名空间

    use ZendPdf\PdfDocument;
    

    然后在 Controller 动作的某个地方创建一个新的 pdf 对象并使用它

    public funciton someAction()
    {
         $pdf = PdfDocument::load('path/to/pdf');
    }
    

    【讨论】:

      【解决方案2】:

      我假设你使用的是this?在这种情况下,它不是一个模块,而是一个,这可以解释为什么你不能将它作为一个模块加载。如果您使用 Composer 安装它,那么您应该能够在您的 vendor 目录中找到它,并且它应该是自动加载的。然后,您应该能够像使用 Zend Framework 中的所有类一样使用它,方法是使用适当的命名空间。我自己没有用过这个,但我认为这是你做错了。

      【讨论】:

      • 是的,您提供的链接正是我想要使用的。我用composer安装了它,它在供应商目录中。您提到将它与适当的名称空间一起使用。那会是什么? ` 使用 ZendPdf `
      • 试试这个:$pdf = \ZendPdf::load('/tmp/pdf_report.pdf');。或者,您可以在类定义上方添加命名空间:use ZendPdf;,然后像您在操作中所做的那样做。
      • 抱歉错误。当然必须是\ZendPdf\PdfDocument::load('/tmp/pdf_report.pdf');use ZendPdf\PdfDocument
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 2014-10-04
      相关资源
      最近更新 更多