2011-08-19 43 views
1

为什么在AppoloV.php中autoload.php中没有dev和prod的区别?分离开发包与您在生产中需要的软件包

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

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; 
    } 

回答

1

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

其次,自动装载机没有与symfony1相同的算法,也不缓存文件所在的位置。它是在飞行中制作的,在这之前你会得到大量的其他演出问题;)

+0

这是一个很好的观点!我想知道如何使用像autoloader这样的特定组件。你认为什么是解决这个问题的好方法。该文档仅针对原始分布的标准用法。我是否必须检查代码及其文档? – Raffael

+0

即使组件文档缺乏,该框架的文档也相当广泛。然后,您将Symfony2谷歌组和代码作为知识来源。 – futurecat

相关问题