0

我正在尝试让动态路由器工作。但在我看来,事实并非如此。当我调用'/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-nodes 的原因。

这是我的配置文件的片段:

# 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.*"
    }

有谁知道是什么问题?

4

3 回答 3

0

抱歉,不是原始问题的答案

通常,您似乎缺少启用动态路由器的配置。

cmf_routing:
    dynamic:
        enabled: true

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

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

于 2013-11-03T10:28:49.477 回答
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

于 2013-11-08T08:07:04.060 回答
0

我想到了。我在这里遇到了两个问题。

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

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

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

于 2013-11-14T10:52:31.793 回答