为什么symfony2没有复制我的包?

时间:2012-03-03 19:32:40

标签: php symfony

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

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

    public function registerContainerConfiguration(LoaderInterface $loader)
    {
        $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
    }
}

我的autoload.php看起来像:

<?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',
));

// intl
if (!function_exists('intl_get_error_code')) {
    require_once __DIR__.'/../vendor/symfony/src/Symfony/Component/Locale/Resources/stubs/functions.php';

    $loader->registerPrefixFallbacks(array(__DIR__.'/../vendor/symfony/src/Symfony/Component/Locale/Resources/stubs'));
}

$loader->registerNamespaceFallbacks(array(
    __DIR__.'/../src',
));
$loader->register();

AnnotationRegistry::registerLoader(function($class) use ($loader) {
    $loader->loadClass($class);
    return class_exists($class, false);
});
AnnotationRegistry::registerFile(__DIR__.'/../vendor/doctrine/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php');

// Swiftmailer needs a special autoloader to allow
// the lazy loading of the init file (which is expensive)
require_once __DIR__.'/../vendor/swiftmailer/lib/classes/Swift.php';
Swift::registerAutoload(__DIR__.'/../vendor/swiftmailer/lib/swift_init.php');

当我这样做时:

php app/console assets:install web

我得到以下内容:

Installing assets for Symfony\Bundle\FrameworkBundle into web/bundles/framework
Installing assets for Acme\DemoBundle into web/bundles/acmedemo
Installing assets for Symfony\Bundle\WebProfilerBundle into web/bundles/webprofiler
Installing assets for Sensio\Bundle\DistributionBundle into web/bundles/sensiodistribution

为什么我的BloggerBlogBu​​ndle没有被复制?

3 个答案:

答案 0 :(得分:17)

  

注意:由于OP的答案很短,并没有真正详细说明,这里为未来的读者提供了更深入的答案,所以希望你没有像我一样尽可能地挖掘! :)

我们似乎正在遵循完全相同的教程并且遇到完全相同的问题,而且上面的答案并不具有描述性,我不得不自己做一点挖掘,这里是完全错误。

第1步

您的src/Blogger/BlogBundle需要在/resources文件夹中包含public/css文件夹。因此,您需要按如下方式放置CSS文件:

src/Blogger/BlogBundle/resources/public/css/<stylesheet>.css

创建/public/css文件夹,如果它不存在(它对我来说不存在)。

第2步 您需要运行资产管理工具以自动为/web创建符号链接,以便可以访问这些符号链接。

php app/console assets:install web

您现在会注意到,如果您打开(使用Linux上的Windows资源管理器/ nautilus)您的dev目录并找到/web文件夹,那么/web/bundles/bloggerblog/css/<stylesheet>.css已自动为您创建了!

您现在可以使用以下方法访问代码中的CSS文件:

<link href="{{ asset('/bundles/bloggerblog/css/<stylesheet>.css') }}" type="text/css" rel="stylesheet" />

注意:&#39; .css&#39;替换为屏幕&#39; screen.css&#39;本教程

......那应该是它!

答案 1 :(得分:1)

我对原始问题有完全相同的问题,在运行'php app / console assets:install web'后,资产不会从bundle的Resources文件夹复制到web / bundles所以我所做的就是运行这个命令'php app / console cache:clear --env = prod'并修复了它。正如您所看到的那样,您正在处理prod资产或将资产安装到web目录中的prod环境中,因此对于prod来说,明确的cach是合理的。所以这样做:

1)$ php app / console cache:clear --env = prod 2)$ php app / console assets:安装web OR $ php app / console assets:安装web --symlink 3)$ php app / console assetic:dump --env = prod(如果你使用内置的Assetic,它会将/ css转储/组合到/ web / css中的一个大的,而不是/ web / bundles)

之后一切都会到位。你可以获得/ web / bundles中的所有资产以及/ web / css中的资产转储,所有这些资产都是针对prod env。

答案 2 :(得分:0)

刚出现此问题,请确保BlahBundle.php与Resources目录位于同一目录中