我正在努力让动态路由器正常工作。但在我看来,它并没有。 当我打电话给'/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.*"
}
有谁知道问题可能是什么?
答案 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设置为节点名称。
现在它工作正常(只要在路由节点下创建路由。