【问题标题】:separating bundles for dev from the ones you need in production将开发包与生产中需要的包分开
【发布时间】:2011-08-19 12:06:15
【问题描述】:

为什么 autoload.php 中的 dev 和 prod 没有 AppKernel.php 中的区别?

我当然可以检查环境,但我想知道是否有这样做的原因。

B/c 许多包对开发很有用,例如管理界面需要很多包(我猜...)。但我不想在生产过程中加载它们!

autoload.php:

use Symfony\Component\ClassLoader\UniversalClassLoader;
use Doctrine\Common\Annotations\AnnotationRegistry;

$loader = new UniversalClassLoader();
$loader->registerNamespaces(array(
    'Symfony'          => array(__DIR__.'/../vendor/symfony/src', __DIR__.'/../vendor/bundles'),
    'Sensio'           => __DIR__.'/../vendor/bundles',
    'JMS'              => __DIR__.'/../vendor/bundles',
    'Doctrine\\Common' => __DIR__.'/../vendor/doctrine-common/lib',
    'Doctrine\\DBAL'   => __DIR__.'/../vendor/doctrine-dbal/lib',
    'Doctrine'         => __DIR__.'/../vendor/doctrine/lib',
    'Monolog'          => __DIR__.'/../vendor/monolog/src',
    'Assetic'          => __DIR__.'/../vendor/assetic/src',
    'Metadata'         => __DIR__.'/../vendor/metadata/src',
));
$loader->registerPrefixes(array(
    'Twig_Extensions_' => __DIR__.'/../vendor/twig-extensions/lib',
    'Twig_'            => __DIR__.'/../vendor/twig/lib',
));

AppKernel.php:

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\DoctrineBundle\DoctrineBundle(),
            new Symfony\Bundle\AsseticBundle\AsseticBundle(),
            new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
            new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
        );

        if (in_array($this->getEnvironment(), array('dev', 'test'))) {
            $bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
            $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
            $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
            $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
        }

        return $bundles;
    }

【问题讨论】:

    标签: symfony


    【解决方案1】:

    首先,自动加载器是一个独立的库。您可以在与 Symfony2 无关的完全不同的项目中使用它,因为它完全不耦合。由于它不是耦合的,因此它必须与环境无关。

    其次,自动加载器没有和symfony1相同的算法,也不缓存文件所在的位置。它是即时制作的,在此之前你会遇到很多其他性能问题;)

    【讨论】:

    • 说得好!我想知道如何使用某些组件,例如自动加载器。你会建议什么是解决这个问题的好方法。该文档仅适用于按原样分发的标准用法。我必须检查代码及其文档吗?
    • 框架的文档非常丰富,即使缺少组件的文档。然后,您将 Symfony2 google 组和代码作为知识来源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 2011-10-16
    • 2017-07-24
    相关资源
    最近更新 更多