代码之家  ›  专栏  ›  技术社区  ›  Antoine Subit

在没有composer的情况下自动加载类命名空间的问题

  •  1
  • Antoine Subit  · 技术社区  · 10 年前

    我有一些问题 在没有Composer的Symfony2项目中注册捆绑包 .
    在我的公司,由于代理,我不能使用Composer。

    我已成功安装 FOSUserBundle 所以我不明白为什么它不起作用 KnpSnappyBundle ...

    我的 vendor 树:

    vendor/
        friendofsymfony/
            user-bundle/
                FOS/
                    UserBundle/
                        FOSUserBundle.php
        knplabs/
            knp-snappy-bundle/
                Knp/
                    Bundle/
                        SnappyBundle/
                            KnpSnappyBundle.php
    

    我的 app/autoload.php :

    <?php
    
    use Doctrine\Common\Annotations\AnnotationRegistry;
    use Composer\Autoload\ClassLoader;
    
    /**
     * @var ClassLoader $loader
     */
    $loader = require __DIR__.'/../vendor/autoload.php';
    $loader->add('FOS', __DIR__.'/../vendor/friendsofsymfony/user-bundle');
    $loader->add('Knp', __DIR__.'/../vendor/knplabs/knp-snappy-bundle');
    
    AnnotationRegistry::registerLoader(array($loader, 'loadClass'));
    
    return $loader;
    

    我的 app/AppKernel.php :

    <?php
    
    use Symfony\Component\HttpKernel\Kernel;
    use Symfony\Component\Config\Loader\LoaderInterface;
    
    class AppKernel extends Kernel
    {
        public function registerBundles()
        {
            $bundles = array(
                new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
                new Symfony\Bundle\SecurityBundle\SecurityBundle(),
                new Symfony\Bundle\TwigBundle\TwigBundle(),
                new Symfony\Bundle\MonologBundle\MonologBundle(),
                new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
                new Symfony\Bundle\AsseticBundle\AsseticBundle(),
                new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
                new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
                new My\Bundle\OwnBundle\MyOwnBundle(),
                new FOS\UserBundle\FOSUserBundle(),
                new Knp\Bundle\SnappyBundle\KnpSnappyBundle()
            );
    
            if (in_array($this->getEnvironment(), array('dev', 'test'))) {
                $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
                $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
                $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
            }
    
            return $bundles;
        }
    
        public function registerContainerConfiguration(LoaderInterface $loader)
        {
            $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
        }
    }
    

    错误消息:

    ClassNotFoundException: Attempted to load class "KnpSnappyBundle" from namespace "Knp\Bundle\SnappyBundle" in C:\xampp\htdocs\my-project\app\AppKernel.php line 25. Do you need to "use" it from another namespace?
    

    请帮忙!

    2 回复  |  直到 10 年前
        1
  •  3
  •   Antoine Subit    10 年前

    好的,我找到了!

    所以这是一个很好的程序,但我忘了 清除缓存 .

    php app/consoloe ca:cl -e=dev
    

    之后,我仍然有一个错误:

    Fatal error: Interface 'Knp\Snappy\GeneratorInterface' not found in /vendor/bundles/Knp/Bundle/SnappyBundle/Snappy/LoggableGenerator.php on line 14
    

    因为没有Composer,KnpSnappyBundle的一部分缺失,所以我 download the missing directories 在GitHub和 添加我的 vendor :

    vendor/
        knplabs/
            knp-snappy-bundle/
                Knp/
                    Bundle/
                        SnappyBundle/
                            KnpSnappyBundle.php
                    Snappy/
                        Exeption/
                        AbstractGenerator.php
                        GeneratorInterface.php
                        Image.php
                        Pdf.php
                        Process.php
    

    一切正常,我没有修改 app/autoload.php 和我的 app/AppKernel.php .

        2
  •  0
  •   svyat1s xjn9    3 年前

    目前问题已解决。

    作曲家:

    composer require knplabs/knp-snappy
    
    composer require h4cc/wkhtmltopdf-amd64
    

    Symfony用途:

    use Knp\Snappy\Pdf;
    

    代码:

    $knpSnappyPdf = new Pdf();
    
    $knpSnappyPdf->setBinary(__DIR__ . '/vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64');
    
    $html = $this->renderView('Pdf/template.html.twig', [
        ...
    ]);
    
    $data = $knpSnappyPdf->getOutputFromHtml($html);
    

    这个捆绑包解决了我基于绝对路径的局部图像问题。