6

你能给我一些关于如何创建一个新的 Symfony2 项目的信息吗?

我开始从 github 获取 symfony/symfony-sandbox 作为 tar-ball。然后我删除了它的旧 src/vendor 内容。

我使用 git 子模块获取最新的供应商库。(fabpot/Symfony,学说,迁移,...)。

问题是与最新的 fabpot/Symfony 代码相比,沙盒似乎已经过时了。

所以我开始修改更改的内容(FoundationBundle 重命名,一些方法签名更改(如 registerContainerConfiguration,...)。

我仍然收到此错误:

Symfony\Components\HttpKernel\Exception\NotFoundHttpException:找不到控制器。

路由似乎有问题:请求与控制器不匹配

你有什么主意吗?

更好的是,有没有人有一个可以使用最新 Symfony 代码的沙箱?

4

1 回答 1

3

主要问题是 Symfony 变化太快,无法维护基于主干/主分支的工作解决方案。

也许我没有关于如何开始的最佳方法,但经过一些搜索,我找到了一个解决方案:

我终于找到了我的问题:

我所有的问题都与 DI 有关。

第一个问题是 ControllerLoaderListener 没有观察到“core.load_controller”事件。

这是因为我在 config.yml 中停用了网络扩展程序(真丢脸……但我正在测试!)

在那之后,我遇到了“路由器”服务的另一个问题。它也没有加载!

通过看这里:

src/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yml/config/config.yml

我发现路由器服务是由这个config.yml激活的:

parameters:
    kernel.include_core_classes: false

kernel.config: ~

web.config: #enables the Web DI extension
  router: { resource: "%kernel.root_dir%/config/routing.yml" } #enables the Routing DI extension

web.templating: ~

doctrine.dbal: ~
doctrine.orm: ~

如果我对大家这么说,那只是因为我希望节省一些其他人的头疼:)

如果有人感兴趣,这里有一个工作内核,它与最新的 fabpot/Symfony 存储库一起工作。

<?php

require_once __DIR__.'/../src/autoload.php';

use Symfony\Framework\Kernel;
use Symfony\Components\Routing\Loader\YamlFileLoader as RoutingLoader;

use Symfony\Components\DependencyInjection\Loader\LoaderInterface;

class ECommerceKernel extends Kernel
{
    public function registerRootDir()
    {
        return __DIR__;
    }

    public function registerBundles()
    {
        $bundles = array(
            new Symfony\Framework\KernelBundle,
            new Symfony\Bundle\FrameworkBundle\FrameworkBundle,
            new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle,
            new Symfony\Bundle\DoctrineBundle\DoctrineBundle,
            new Symfony\Bundle\DoctrineMigrationsBundle\DoctrineMigrationsBundle,
            new Application\ECommerceBundle\ECommerceBundle,
        );

        if ($this->isDebug()) {
        }

        return $bundles;
    }

    public function registerBundleDirs()
    {
        $bundles = array(
            'Application'        => __DIR__.'/../src/Application',
            'Bundle'             => __DIR__.'/../src/Bundle',
            'Symfony\\Framework' => __DIR__.'/../src/vendor/symfony/src/Symfony/Framework',
            'Symfony\\Bundle'    => __DIR__.'/../src/vendor/symfony/src/Symfony/Bundle',
        );

        return $bundles;
    }

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

    public function registerRoutes()
    {
        $loader = new RoutingLoader($this->getBundleDirs());

        return $loader->load(__DIR__.'/config/routing.yml');
    }
}
于 2010-07-22T10:15:13.520 回答