symfony 2.5 使用 ClassLoader 添加 Zend_pdf

symfony 2.5 use ClassLoader to add Zend_pdf

我在 Symfony 2.5 中工作,想为 pdf 使用 zend 框架 (zend_pdf)

我尝试了类加载器,但我可能做错了什么,因为它不起作用(当然)...

我不知道在哪里添加我的类加载器...我想 autoload.php 但我不知道如何...这是我的 autoload.php,标准的:

<?php
 use Doctrine\Common\Annotations\AnnotationRegistry;
 use Composer\Autoload\ClassLoader; 
/**
* @var ClassLoader $loader
*/
$loader = require __DIR__.'/../vendor/autoload.php';

AnnotationRegistry::registerLoader(array($loader, 'loadClass'));

return $loader;

我试过像这样在我的控制器中添加它:

 use Symfony\Component\ClassLoader\ClassLoader;

/**
 * @Template()
 */
public function pdfAction()
{
    $loader = new ClassLoader();
    $loader->addPrefix('Zend', __DIR__.'/vendor/zf/library');
    $loader->register();

    $pdf = new \Zend\Pdf\Zend_Pdf();
    ....

但他接着说:

Attempted to load class "Zend_Pdf" from namespace "Zend\Pdf". Did you forget a "use" statement for another namespace?

我该如何解决这个问题? 谢谢。

你应该为它注册新的命名空间

我有以下解决方案来连接 zf 库

1) zf 库位于 vendor/gamma/zf/library

2) venvodor/zf/composer.json

{
        "name": "gamma/zf",
        "type": "symfony-bundle",
        "autoload": { 
                        "psr-0": { "Zend_": "" }
                    },
        "target-dir": "",           
        "require": {
            "php": ">=5.3.3",
            "symfony/symfony": "~2.1"
        }
 }

3) app/autoload.php

    <?php
    use Doctrine\Common\Annotations\AnnotationRegistry;

    $loader = include __DIR__.'/../vendor/autoload.php';
    $loader->add("Zend_", __DIR__.'/../vendor/gamma/zf/library');
set_include_path(__DIR__.'/../vendor/gamma/zf/library'.PATH_SEPARATOR.get_include_path());

4) 使 composer 更新以生成新的命名空间

5) 在 service/controller 处用作

<?php

namespace MyApp\SomeBundle\Services;

use Symfony\Component\DependencyInjection\ContainerInterface;

use Zend_XmlRpc_Client;

public function __construct(ContainerInterface $container, $cookiePath)
{
...
$this->xmlRpc = new Zend_XmlRpc_Client($zendUrl->getUri(), $server);
...
}