Pregunta

I'm trying to get the Dynamic Router working. But as it appears to me, it doesn't. When I call '/web/app_dev.php/de/test' I get

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

Also my Symfony profiler tells me, that there wasn't any query sent to the database. This is why I assume, the Dynamic Router didn't check the phpcr-nodes.

This is a snipped of my config file:

# 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

I'm using Sonata Admin and configured the /de/test route within the backend. This was the resulting database entry:

| 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 |

These are my composer requirements:

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

Does anyone know what the problem could be?

¿Fue útil?

Solución 3

I figured it out. I had two problems here.

First, I had to configure the cmf_routing.routes_basepath to get the right prefix for the nodes. I tried to force it to be the root node /. But as I did this there was not even a database lookup anymore. It turned out, that this misfunctioning came from the routes_basepath I configured. Any other value than / evoked a lookup on pageload.

So I had to create a new node (like the "/routes" which the documentation suggested"), and set the cmf_routing.routes_basepath to the node name.

Now it works fine (as long as the routes are created under the routes node.

Otros consejos

Reading the question again, i really wonder if things got mixed up. The example from a database looks like Doctrine ORM. But you enable Doctrine phpcr-odm loading. Did you maybe mean to enable orm instead? Then you would need to look at the persistence.orm section of the configuration.

But what should be easier (especially if you want to use other parts of the CMF without building your own models) is to use PHPCR-ODM for routes. Unless you configure differently, the routes are in the repository at /cms/routes . The documentation for PHPCR-ODM routes is here http://symfony.com/doc/master/cmf/bundles/routing/dynamic.html .

Sorry, not the answer to the original question

You seem to be missing the configuration to enable the dynamic router in general.

cmf_routing:
    dynamic:
        enabled: true

See also the documentation at http://symfony.com/doc/master/cmf/bundles/routing/dynamic.html

I agree that the bundle should activate the dynamic router if any configuration is specified for it - if you want to do a pull request to improve that, you are welcome. (This is already the case)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top