6

新しい Symfony2 プロジェクトの作成方法に関する情報を教えていただけますか?

symfony/symfony-sandbox を github から tar-ball として取得し始めました。次に、古い src/vendor コンテンツを削除しました。

git サブモジュールで最新のベンダー ライブラリを取得します。(fabpot/Symfony、ドクトリン、マイグレーションなど)。

問題は、最新の fabpot/Symfony コードと比較して、サンドボックスが古くなっているように見えることです。

そこで、何が変わったのかを修正し始めました (FoundationBundle の名前変更、いくつかのメソッド シグネチャの変更 (registerContainerConfiguration など))。

私はまだこのエラーが発生します:

Symfony\Components\HttpKernel\Exception\NotFoundHttpException: コントローラーが見つかりません。

ルーティングに問題があるようです:リクエストは no controller と一致します。

何か考えはありますか?

さらに良いことに、最新の Symfony コードで動作するサンドボックスを持っている人はいますか?

4

1 に答える 1

3

主な問題は、Symfonyの変更が速すぎて、トランク/メインブランチに基づいて機能するソリューションを維持できないことです。

たぶん私はどのように始めるかについて最善のアプローチを持っていませんでしたが、いくつかの検索の後、私は解決策に到達しました:

私はついに私の問題を見つけました:

私の問題はすべてDI関連でした。

最初の問題は、ControllerLoaderListenerが「core.load_controller」イベントを監視していなかったことです。

config.ymlでWeb拡張機能を非アクティブ化したためです(恥ずかしいですが...テストしていました!)

その後、「ルーター」サービスで別の問題が発生しました。どちらもロードされていません!

ここを見て:

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 に答える