需要帮助了解使用Composer和Symfony安装DOMPDF

时间:2017-11-01 21:14:40

标签: symfony composer-php dompdf

我在尝试弄清楚如何在Composer和Symfony中安装和使用DOMPDF时遇到了大量麻烦。这是几年前写的一个项目,我对Composer,Symfony和DOMPDF都是全新的......有人告诉我,我们使用的是Composer和Symfony。

我已经使用puTTy命令行界面安装了DOMPDF: 1.转到我的composer.json所在的文件夹(供应商) 2.运行命令“Install dompdf / dompdf”它成功完成,没有错误。 3.然后运行命令composer“require dompdf / dompdf”,该命令也成功完成,没有错误。

然后我迷路/困惑......

我看到用于编辑composer.json的说明:

{
"require": {
    "squizlabs/php_codesniffer": "2.0.*",
}

所以这是composer.json的新内容

{
"require": {
    "spipu/html2pdf": "^5.0",
    "dompdf/dompdf": "^0.8.1"
}

我尝试使用DOMPDF,在我的PHP代码中添加以下行,我得到的只是一个空白页

use Dompdf\Dompdf;

还有一个autoload.php,如下所示:

//autoload.php @generated by Composer 
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit********************************::getLoader();

在兔子洞之后,autoload_real.php看起来像这样:

// autoload_real.php @generated by Composer
class ComposerAutoloaderInit987ec9019a1b2f978bf00ce76684ede0
private static $loader;

public static function loadClassLoader($class)
{
    if ('Composer\Autoload\ClassLoader' === $class) {
        require __DIR__ . '/ClassLoader.php';
    }
}

public static function getLoader()
{
    if (null !== self::$loader) {
        return self::$loader;
    }

    spl_autoload_register(array('ComposerAutoloaderInit987ec9019a1b2f978bf00ce76684ede0', 'loadClassLoader'), true, true);
    self::$loader = $loader = new \Composer\Autoload\ClassLoader();
    spl_autoload_unregister(array('ComposerAutoloaderInit987ec9019a1b2f978bf00ce76684ede0', 'loadClassLoader'));

    $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
    if ($useStaticLoader) {
        require_once __DIR__ . '/autoload_static.php';

        call_user_func(\Composer\Autoload\ComposerStaticInit987ec9019a1b2f978bf00ce76684ede0::getInitializer($loader));
    } else {
        $map = require __DIR__ . '/autoload_namespaces.php';
        foreach ($map as $namespace => $path) {
            $loader->set($namespace, $path);
        }

        $map = require __DIR__ . '/autoload_psr4.php';
        foreach ($map as $namespace => $path) {
            $loader->setPsr4($namespace, $path);
        }

        $classMap = require __DIR__ . '/autoload_classmap.php';
        if ($classMap) {
            $loader->addClassMap($classMap);
        }
    }

    $loader->register(true);

    if ($useStaticLoader) {
        $includeFiles = Composer\Autoload\ComposerStaticInit987ec9019a1b2f978bf00ce76684ede0::$files;
    } else {
        $includeFiles = require __DIR__ . '/autoload_files.php';
    }
    foreach ($includeFiles as $fileIdentifier => $file) {
        composerRequire987ec9019a1b2f978bf00ce76684ede0($fileIdentifier, $file);
    }

    return $loader;
}}function composerRequire987ec9019a1b2f978bf00ce76684ede0($fileIdentifier, $file){if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
    require $file;$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;}}

此外,我在供应商文件中有14个文件夹,我假设这些文件夹都是Composer使用的软件包,但是我没有看到composer.json文件中需要它们,并且在安装DOMPDF之后,我没有查看供应商文件夹。我想删除它们,但我不知道它是什么和没有被使用。

我读过“入门指南”,但我仍然不知道自己做错了什么。

我相信我会再提出一千个问题......谢谢你的耐心等待。

1 个答案:

答案 0 :(得分:1)

a)您的composer.json文件应该位于项目目录的根目录中,而不是在供应商目录中。

b)只需输入命令

  

作曲家需要dompdf / dompdf

项目目录中的

应足以在供应商目录中安装库并添加行

  

“dompdf / dompdf”:“^ 0.8.1”

你的composer.json中的

c)按照https://github.com/dompdf/dompdf上有关如何使用dompdf的说明进行操作。

d)一般情况下,在使用composer时,您必须包含vendor / autoload.php文件,但必须包含在已经发生在app / autoload.php中的Symfony框架中。

  

要求'vendor / autoload.php';

e)dompdf确实使用名称空间。小例子:

require "../vendor/autoload.php"; // change path if you need to

use Dompdf\Dompdf;

// instantiate and use the dompdf class
$dompdf = new Dompdf();
$dompdf->loadHtml('hello world');

// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4', 'landscape');

// Render the HTML as PDF
$dompdf->render();

// Output the generated PDF to Browser
$dompdf->stream();

f)许多可以与作曲家一起安装的软件包也使用其他软件包。如果你看一下composer.json from dompdf,你会发现它需要一些其他的包,作曲家会自动为你安装。

[编辑]

您的composer.json位于项目的根目录中。您的供应商目录也是如此。在您的供应商目录中,将有一个作曲家目录,这是正常的。但是从根目录执行任何命令。结构:

- [project root] (execute commands here)
       |
       |- composer.json
       |- [vendor]
             |
             |- [composer]

如果您遇到困难,只需删除整个供应商目录和composer.json文件,然后再次使用命令

  

作曲家需要dompdf / dompdf