2013-11-02 4 views
0

Я пытаюсь заставить динамический маршрутизатор работать. Но, как мне кажется, это не так. Когда я называю «/web/app_dev.php/de/test» Я получаюSymfony2 Dynamic Router не работает

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 профайлер говорит мне, что не было никакого запроса отправляется в базу данных. Вот почему я предполагаю, что Dynamic Router не проверял 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 Администратор и настроить/де/тестовый маршрут в пределах внутреннего интерфейса. Это результирующее запись базы данных:

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

Кто-нибудь знает, что может быть проблема?

ответ

0

Я понял. У меня здесь были две проблемы.

Во-первых, мне пришлось настроить cmf_routing.routes_basepath, чтобы получить правый префикс для узлов. Я попытался заставить его быть корневым узлом /. Но, как я это делал, больше не было поиска базы данных. Оказалось, что это неправильное использование произошло из настроек route_basepath, которые я настроил. Любое другое значение, отличное от /, вызвало поиск по pageload.

Так что мне пришлось создать новый узел (как «/ маршрутов», которые в документации, предложенных "), и установите cmf_routing.routes_basepath на имя узла.

Теперь он отлично работает (до тех пор, как маршруты создаются в узле маршрутов.

+0

Не могли бы Вы предоставить более подробную информацию об этом? Я пытался добавить routes_basepath:/CMS/маршруты под cmf_routing: но получил следующее сообщение об ошибке: [Symfony \ Component \ Config \ Определение \ Exception \ InvalidConfigurationException] Непризнанные опции "routes_basepath" под " cmf_routing " – AlexG

+2

Сделайте' .app/console config: dump-reference cmf_routing', и вы увидите, куда поместить route_basepath. – enigma

0

К сожалению, не ответ на исходный вопрос

Вы, кажется, отсутствует конфигурацию, чтобы включить динамический маршрутизатор в целом.

cmf_routing: 
    dynamic: 
     enabled: true 

Смотрите также документацию на http://symfony.com/doc/master/cmf/bundles/routing/dynamic.html

Я согласен, что пакет должен активировать динамический маршрутизатор, если любая конфигурация задана для него - если вы хотите сделать запрос тянуть, чтобы улучшить, что вы Добро пожаловать. (Это уже так)

+0

К сожалению, это также не работает.То, что вы предлагаете, должно быть уже реализовано в соответствии с документацией по тому же адресу, который вы указали в своем ответе. «Маршрутизатор автоматически включается, как только вы добавляете любую другую конфигурацию в динамическую запись». – enigma

+0

@dbu это действительно уже реализовано: https://github.com/symfony-cmf/RoutingBundle/blob/master/DependencyInjection/Configuration.php#L57 –

+0

@WouterJ так что это семантика canBeEnabled? его правда, как только что-то там настроено? хороший. – dbu

0

Снова прочитав вопрос, я действительно задаюсь вопросом, были ли замешаны вещи. Пример из базы данных выглядит как Doctrine ORM. Но вы активируете загрузку phpcr-odm Doctrine. Возможно, вы имели в виду включить орма? Затем вам нужно будет посмотреть раздел конфигурации persistence.orm.

Но что должно быть проще (особенно если вы хотите использовать другие части CMF без создания собственных моделей) является использование PHPCR-ODM для маршрутов. Если вы не настроены по-другому, маршруты находятся в репозитории на/cms/routes. Документация для маршрутов PHPCR-ODM находится здесь http://symfony.com/doc/master/cmf/bundles/routing/dynamic.html.