Symfony2动态路由器不起作用

时间:2013-11-02 10:08:34

标签: symfony url-routing symfony-cmf

我正在努力让动态路由器正常工作。但在我看来,它并没有。 当我打电话给'/web/app_dev.php/de/test'时,我得到了

Stack Trace: [1] Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "GET /de/test"
    at n/a
        in /var/www/myProject/app/cache/dev/classes.php line 1882

    at Symfony\Component\HttpKernel\EventListener\RouterListener->onKernelRequest(object(GetResponseEvent))
        in  line 

    at call_user_func(array(object(RouterListener), 'onKernelRequest'), object(GetResponseEvent))
        in /var/www/myProject/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Debug/TraceableEventDispatcher.php line 450

    at Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher->Symfony\Component\HttpKernel\Debug\{closure}(object(GetResponseEvent))
        in  line 

    at call_user_func(object(Closure), object(GetResponseEvent))
        in /var/www/myProject/app/cache/dev/classes.php line 1666

    at Symfony\Component\EventDispatcher\EventDispatcher->doDispatch(array(object(Closure), object(Closure), object(Closure), object(Closure), object(Closure), object(Closure), object(Closure), object(Closure), object(Closure), object(Closure), object(Closure), object(Closure), object(Closure)), 'kernel.request', object(GetResponseEvent))
        in /var/www/myProject/app/cache/dev/classes.php line 1599

    at Symfony\Component\EventDispatcher\EventDispatcher->dispatch('kernel.request', object(GetResponseEvent))
        in /var/www/myProject/app/cache/dev/classes.php line 1763

    at Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch('kernel.request', object(GetResponseEvent))
        in /var/www/myProject/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Debug/TraceableEventDispatcher.php line 139

    at Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher->dispatch('kernel.request', object(GetResponseEvent))
        in /var/www/myProject/app/bootstrap.php.cache line 2804

    at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), '1')
        in /var/www/myProject/app/bootstrap.php.cache line 2789

    at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), '1', true)
        in /var/www/myProject/app/bootstrap.php.cache line 2918

    at Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel->handle(object(Request), '1', true)
        in /var/www/myProject/app/bootstrap.php.cache line 2220

    at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
        in /var/www/myProject/web/app_dev.php line 29

[2] Symfony\Component\Routing\Exception\ResourceNotFoundException: None of the routers in the chain matched this request GET /myProject/web/app_dev.php/de/test HTTP/1.1 Accept:          text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding: gzip, deflate Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 Cache-Control:   no-cache Connection:      keep-alive Cookie:          PHPSESSID=6a5ds9lfehu405ai79o7tm1h55; lunetics_locale=de Host:         localhost Pragma:          no-cache User-Agent:      Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0 X-Php-Ob-Level:  1


    at n/a
        in /var/www/myProject/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ChainRouter.php line 192

    at Symfony\Cmf\Component\Routing\ChainRouter->doMatch('/de/test', object(Request))
        in /var/www/myProject/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ChainRouter.php line 147

    at Symfony\Cmf\Component\Routing\ChainRouter->matchRequest(object(Request))
        in /var/www/myProject/app/cache/dev/classes.php line 1869

    at Symfony\Component\HttpKernel\EventListener\RouterListener->onKernelRequest(object(GetResponseEvent))
        in  line 

    at call_user_func(array(object(RouterListener), 'onKernelRequest'), object(GetResponseEvent))
        in /var/www/myProject/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Debug/TraceableEventDispatcher.php line 450

    at Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher->Symfony\Component\HttpKernel\Debug\{closure}(object(GetResponseEvent))
        in  line 

    at call_user_func(object(Closure), object(GetResponseEvent))
        in /var/www/myProject/app/cache/dev/classes.php line 1666

    at Symfony\Component\EventDispatcher\EventDispatcher->doDispatch(array(object(Closure), object(Closure), object(Closure), object(Closure), object(Closure), object(Closure), object(Closure), object(Closure), object(Closure), object(Closure), object(Closure), object(Closure), object(Closure)), 'kernel.request', object(GetResponseEvent))
        in /var/www/myProject/app/cache/dev/classes.php line 1599

    at Symfony\Component\EventDispatcher\EventDispatcher->dispatch('kernel.request', object(GetResponseEvent))
        in /var/www/myProject/app/cache/dev/classes.php line 1763

    at Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch('kernel.request', object(GetResponseEvent))
        in /var/www/myProject/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Debug/TraceableEventDispatcher.php line 139

    at Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher->dispatch('kernel.request', object(GetResponseEvent))
        in /var/www/myProject/app/bootstrap.php.cache line 2804

    at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), '1')
        in /var/www/myProject/app/bootstrap.php.cache line 2789

    at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), '1', true)
        in /var/www/myProject/app/bootstrap.php.cache line 2918

    at Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel->handle(object(Request), '1', true)
        in /var/www/myProject/app/bootstrap.php.cache line 2220

    at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
        in /var/www/myProject/web/app_dev.php line 29

我的Symfony分析器也告诉我,没有任何查询发送到数据库。这就是为什么我假设,动态路由器没有检查phpcr节点。

这是我的配置文件的剪辑:

# CMF Routing
cmf_routing:
    chain:
        routers_by_id:
            cmf_routing.dynamic_router: 200
            router.default: 100
    dynamic:
        controllers_by_class:
            Symfony\Cmf\Bundle\RoutingBundle\Doctrine\Phpcr\RedirectRoute: cmf_routing.redirect_controller:redirectAction
        persistence:
            phpcr:
                enabled: true
                use_sonata_admin: true

                content_basepath: /
                route_basepath: /
        locales:
            - de
            - en



cmf_core:
    persistence:
        phpcr:
            enabled: true
            basepath: /


cmf_block:
    persistence:
        phpcr:
            enabled: true
            manager_name: default
            use_sonata_admin: true
            content_basepath: /
    use_imagine: false

cmf_content:
    persistence:
        phpcr:
            content_basepath: /content

# Doctrine Configuration
doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
        charset:  UTF8
        types:
            json: Sonata\Doctrine\Types\JsonType

    orm:
        auto_generate_proxy_classes: %kernel.debug%
        auto_mapping: true


# PHPCR
doctrine_phpcr:
    session:
        backend:
            type: doctrinedbal
            #connection: default
        workspace: default
        username: admin
        password: admin
    odm:
        document_managers:
            default:
                auto_mapping: true
                session: default
                mappings:
                    CmfContentBundle: ~
                    CmfMenuBundle: ~
                    CmfRoutingBundle: ~
        auto_generate_proxy_classes: %kernel.debug%
        proxy_dir:            %kernel.cache_dir%/doctrine/PHPCRProxies
        proxy_namespace:      PHPCRProxies
        locales:
            de: [en]
            en: [de]

sonata_doctrine_phpcr_admin:
    document_tree_defaults: [locale]
    document_tree:
        Doctrine\ODM\PHPCR\Document\Generic:
            valid_children:
                - all
        Symfony\Cmf\Bundle\SimpleCmsBundle\Document\Page: ~
        Symfony\Cmf\Bundle\RoutingBundle\Document\Route:
            valid_children:
                - Symfony\Cmf\Bundle\RoutingBundle\Document\Route
                - Symfony\Cmf\Bundle\RoutingBundle\Document\RedirectRoute
        Symfony\Cmf\Bundle\RoutingBundle\Document\RedirectRoute:
            valid_children: []
        Symfony\Cmf\Bundle\MenuBundle\Document\MenuNode:
            valid_children:
                - Symfony\Cmf\Bundle\MenuBundle\Document\MenuNode
                - Symfony\Cmf\Bundle\MenuBundle\Document\MultilangMenuNode
        Symfony\Cmf\Bundle\ContentBundle\Doctrine\Phpcr\StaticContent:
            valid_children:
                - all
        Symfony\Cmf\Bundle\MenuBundle\Document\MultilangMenuNode:
            valid_children:
                - Symfony\Cmf\Bundle\MenuBundle\Document\MenuNode
                - Symfony\Cmf\Bundle\MenuBundle\Document\MultilangMenuNode

我正在使用Sonata Admin并在后端配置/ de / test路由。这是结果数据库条目:

| id | path     | parent | local_name | namespace | workspace_name | identifier                           | type            | props                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | depth | sort_order |
| 21 | /de/test | /de    | test       |           | default        | 24ec587c-b6f0-4a3f-af23-e107b0a21a32 | nt:unstructured | <?xml version="1.0" encoding="UTF-8"?><sv:node xmlns:mix="http://www.jcp.org/jcr/mix/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:sv="http://www.jcp.org/jcr/sv/1.0" xmlns:rep="internal"><sv:property sv:name="jcr:primaryType" sv:type="Name" sv:multi-valued="0"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="jcr:mixinTypes" sv:type="Name" sv:multi-valued="1"><sv:value>phpcr:managed</sv:value><sv:value>mix:referenceable</sv:value></sv:property><sv:property sv:name="phpcr:class" sv:type="String" sv:multi-valued="0"><sv:value>Symfony\Cmf\Bundle\RoutingBundle\Doctrine\Phpcr\Route</sv:value></sv:property><sv:property sv:name="phpcr:classparents" sv:type="String" sv:multi-valued="1"><sv:value>Symfony\Component\Routing\Route</sv:value><sv:value>Symfony\Cmf\Bundle\RoutingBundle\Model\Route</sv:value></sv:property><sv:property sv:name="jcr:uuid" sv:type="String" sv:multi-valued="0"><sv:value>24ec587c-b6f0-4a3f-af23-e107b0a21a32</sv:value></sv:property><sv:property sv:name="host" sv:type="String" sv:multi-valued="0"><sv:value></sv:value></sv:property><sv:property sv:name="defaultsKeys" sv:type="String" sv:multi-valued="1"><sv:value>_controller</sv:value></sv:property><sv:property sv:name="defaults" sv:type="String" sv:multi-valued="1"><sv:value>ASVDefaultBundle:Default:index</sv:value></sv:property><sv:property sv:name="requirements" sv:type="String" sv:multi-valued="1"/><sv:property sv:name="options" sv:type="String" sv:multi-valued="1"/><sv:property sv:name="addFormatPattern" sv:type="Boolean" sv:multi-valued="0"><sv:value>0</sv:value></sv:property><sv:property sv:name="addTrailingSlash" sv:type="Boolean" sv:multi-valued="0"><sv:value>0</sv:value></sv:property></sv:node> |     2 |          2 |

这些是我作曲家的要求:

"require" : {
        "doctrine/doctrine-fixtures-bundle" : "dev-master",
        "jackalope/jackalope-doctrine-dbal" : "dev-master",
        "friendsofsymfony/user-bundle" : "*",
        "symfony/swiftmailer-bundle" : "2.3.*",
        "sonata-project/cache-bundle" : "dev-master",
        "doctrine/orm" : ">=2.2.3,<2.4-dev",
        "sonata-project/user-bundle" : "dev-master",
        "lunetics/locale-bundle" : "dev-master",
        "twig/extensions" : "1.0.*",
        "php" : ">=5.3.3",
        "symfony-cmf/symfony-cmf" : "dev-master",
        "symfony/monolog-bundle" : "2.3.*",
        "sensio/distribution-bundle" : "2.3.*",
        "symfony/symfony" : "2.3.*",
        "doctrine/phpcr-bundle" : "1.0.0-beta4",
        "sonata-project/doctrine-orm-admin-bundle" : "2.*",
        "sonata-project/easy-extends-bundle" : "dev-master",
        "doctrine/phpcr-odm" : "1.0.0-beta5",
        "symfony/assetic-bundle" : "2.3.*",
        "incenteev/composer-parameter-handler" : "~2.0",
        "sonata-project/doctrine-phpcr-admin-bundle" : "dev-master",
        "sonata-project/intl-bundle" : "dev-master",
        "sensio/generator-bundle" : "2.3.*",
        "sensio/framework-extra-bundle" : "2.3.*",
        "doctrine/doctrine-bundle" : "1.2.*"
    }

有谁知道问题可能是什么?

3 个答案:

答案 0 :(得分:0)

对不起,不是原始问题的答案

您似乎缺少配置以启用动态路由器。

cmf_routing:
    dynamic:
        enabled: true

另请参阅http://symfony.com/doc/master/cmf/bundles/routing/dynamic.html

上的文档

我同意捆绑包应该激活动态路由器,如果为它指定了任何配置 - 如果你想做拉动请求来改善它,欢迎你。(已经是这种情况了) )

答案 1 :(得分:0)

再次阅读这个问题,我真的很想知道事情是否混乱了。数据库中的示例看起来像Doctrine ORM。但是你启用了Doctrine phpcr-odm加载。您是否可能意味着启用orm?然后,您需要查看配置的persistence.orm部分。

但是更容易(特别是如果你想在不构建自己的模型的情况下使用CMF的其他部分)是使用PHPCR-ODM进行路由。除非您配置不同,否则路由位于/ cms / routes的存储库中。 PHPCR-ODM路由的文档在http://symfony.com/doc/master/cmf/bundles/routing/dynamic.html

答案 2 :(得分:0)

我明白了。 我在这里有两个问题。

首先,我必须配置cmf_routing.routes_basepath以获取节点的正确前缀。我试图强迫它成为根节点/。但是当我这样做时,甚至没有数据库查找了。事实证明,这种错误来自我配置的routes_basepath。除/之外的任何其他值都会引起页面加载的查找。

所以我必须创建一个新节点(比如文档建议的“/ routes”),并将cmf_routing.routes_basepath设置为节点名称。

现在它工作正常(只要在路由节点下创建路由。