<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <parameters>
        <parameter key="router.class">Symfony\Bundle\FrameworkBundle\Routing\Router</parameter>
        <parameter key="router.request_context.class">Symfony\Component\Routing\RequestContext</parameter>
        <parameter key="routing.loader.class">Symfony\Bundle\FrameworkBundle\Routing\DelegatingLoader</parameter>
        <parameter key="routing.resolver.class">Symfony\Component\Config\Loader\LoaderResolver</parameter>
        <parameter key="routing.loader.xml.class">Symfony\Component\Routing\Loader\XmlFileLoader</parameter>
        <parameter key="routing.loader.yml.class">Symfony\Component\Routing\Loader\YamlFileLoader</parameter>
        <parameter key="routing.loader.php.class">Symfony\Component\Routing\Loader\PhpFileLoader</parameter>
        <parameter key="router.options.generator_class">Symfony\Component\Routing\Generator\UrlGenerator</parameter>
        <parameter key="router.options.generator_base_class">Symfony\Component\Routing\Generator\UrlGenerator</parameter>
        <parameter key="router.options.generator_dumper_class">Symfony\Component\Routing\Generator\Dumper\PhpGeneratorDumper</parameter>
        <parameter key="router.options.matcher_class">Symfony\Bundle\FrameworkBundle\Routing\RedirectableUrlMatcher</parameter>
        <parameter key="router.options.matcher_base_class">Symfony\Bundle\FrameworkBundle\Routing\RedirectableUrlMatcher</parameter>
        <parameter key="router.options.matcher_dumper_class">Symfony\Component\Routing\Matcher\Dumper\PhpMatcherDumper</parameter>
        <parameter key="router.cache_warmer.class">Symfony\Bundle\FrameworkBundle\CacheWarmer\RouterCacheWarmer</parameter>
        <parameter key="router.options.matcher.cache_class">%router.cache_class_prefix%UrlMatcher</parameter>
        <parameter key="router.options.generator.cache_class">%router.cache_class_prefix%UrlGenerator</parameter>
        <parameter key="router_listener.class">Symfony\Component\HttpKernel\EventListener\RouterListener</parameter>
        <parameter key="router.request_context.host">localhost</parameter>
        <parameter key="router.request_context.scheme">http</parameter>
        <parameter key="router.request_context.base_url"></parameter>
    </parameters>

    <services>
        <service id="routing.resolver" class="%routing.resolver.class%" public="false" />

        <service id="routing.loader.xml" class="%routing.loader.xml.class%" public="false">
            <tag name="routing.loader" />
            <argument type="service" id="file_locator" />
        </service>

        <service id="routing.loader.yml" class="%routing.loader.yml.class%" public="false">
            <tag name="routing.loader" />
            <argument type="service" id="file_locator" />
        </service>

        <service id="routing.loader.php" class="%routing.loader.php.class%" public="false">
            <tag name="routing.loader" />
            <argument type="service" id="file_locator" />
        </service>

        <service id="routing.loader" class="%routing.loader.class%">
            <tag name="monolog.logger" channel="router" />
            <argument type="service" id="controller_name_converter" />
            <argument type="service" id="logger" on-invalid="null" />
            <argument type="service" id="routing.resolver" />
        </service>

        <service id="router.default" class="%router.class%" public="false">
            <tag name="monolog.logger" channel="router" />
            <argument type="service" id="service_container" />
            <argument>%router.resource%</argument>
            <argument type="collection">
                <argument key="cache_dir">%kernel.cache_dir%</argument>
                <argument key="debug">%kernel.debug%</argument>
                <argument key="generator_class">%router.options.generator_class%</argument>
                <argument key="generator_base_class">%router.options.generator_base_class%</argument>
                <argument key="generator_dumper_class">%router.options.generator_dumper_class%</argument>
                <argument key="generator_cache_class">%router.options.generator.cache_class%</argument>
                <argument key="matcher_class">%router.options.matcher_class%</argument>
                <argument key="matcher_base_class">%router.options.matcher_base_class%</argument>
                <argument key="matcher_dumper_class">%router.options.matcher_dumper_class%</argument>
                <argument key="matcher_cache_class">%router.options.matcher.cache_class%</argument>
            </argument>
            <argument type="service" id="router.request_context" on-invalid="ignore" />
            <argument type="service" id="logger" on-invalid="ignore" />
        </service>

        <service id="router" alias="router.default" />

        <service id="router.request_context" class="%router.request_context.class%" public="false">
            <argument>%router.request_context.base_url%</argument>
            <argument>GET</argument>
            <argument>%router.request_context.host%</argument>
            <argument>%router.request_context.scheme%</argument>
            <argument>%request_listener.http_port%</argument>
            <argument>%request_listener.https_port%</argument>
        </service>

        <service id="router.cache_warmer" class="%router.cache_warmer.class%" public="false">
            <tag name="kernel.cache_warmer" />
            <argument type="service" id="router" />
        </service>

        <service id="router_listener" class="%router_listener.class%">
            <tag name="kernel.event_subscriber" />
            <tag name="monolog.logger" channel="request" />
            <argument type="service" id="router" />
            <argument type="service" id="router.request_context" on-invalid="ignore" />
            <argument type="service" id="logger" on-invalid="ignore" />
            <call method="setRequest"><argument type="service" id="request" on-invalid="null" strict="false" /></call>
        </service>
    </services>
</container>
