Php 为什么路线不被识别?
我以前没有使用过symfony2,但继承了一些我正在尝试添加的代码 我已将新路由添加到UserController: 当我运行./app/console router:debug时,我可以看到路由已被识别 . 然而,当我试图通过浏览器访问路由时,我得到了404 通过查看日志文件,我追踪到Php 为什么路线不被识别?,php,symfony,Php,Symfony,我以前没有使用过symfony2,但继承了一些我正在尝试添加的代码 我已将新路由添加到UserController: 当我运行./app/console router:debug时,我可以看到路由已被识别 . 然而,当我试图通过浏览器访问路由时,我得到了404 通过查看日志文件,我追踪到 cache/prod/appProdUrlMatcher.php 此文件是自动生成的,但由于某些原因,此处未生成我的路线 手动编辑此文件已解决此问题-但为什么在此处不自动生成路线?我错过什么了吗 如果我随后清
cache/prod/appProdUrlMatcher.php
此文件是自动生成的,但由于某些原因,此处未生成我的路线
手动编辑此文件已解决此问题-但为什么在此处不自动生成路线?我错过什么了吗
如果我随后清除缓存,路由将再次返回404页面
编辑:
routing.yml看起来像这样
gp_api:
resource: "@AppApiBundle/Controller"
prefix: /api
type: annotation
gp_admin:
resource: "@AppAdminBundle/Controller/"
prefix: /admin
type: annotation
resetpsw:
pattern: /reset-password/{key}
defaults: { _controller: AppApiBundle:Default:resetpsw }
login:
pattern: /login
defaults: { _controller: AppApiBundle:Default:resetpsw }
login_check:
pattern: /login_check
logout:
pattern: /logout
user:
pattern: /user
defaults: { _controller: AcmeMainBundle:Security:user }
admin_login:
path: /admin/login
defaults: { _controller: AppAdminBundle:Default:login }
admin_twitter:
path: /admin/twitter
defaults: { _controller: AppAdminBundle:Default:twitter }
admin_twitter_login:
path: /admin/twitter_login
defaults: { _controller: AppAdminBundle:Default:twitterLogin }
admin_check:
pattern: /admin/admin_check
fos_oauth_server_token:
resource: "@FOSOAuthServerBundle/Resources/config/routing/token.xml"
fos_oauth_server_authorize:
resource: "@FOSOAuthServerBundle/Resources/config/routing/authorize.xml"
gp_api_oauth_server_auth_login:
pattern: /oauth/v2/auth_login
defaults: { _controller: AppApiBundle:Security:login }
gp_api_oauth_server_auth_login_check:
pattern: /oauth/v2/auth_login_check
defaults: { _controller: AppApiBundle:Security:loginCheck }
在
路由器:调试
我可以看到路线:
pushsettings ANY ANY ANY /api/user/pushsettings
但是这不是在缓存文件中生成的您不应该手动编辑该文件,因为它是自动生成的。只要清除/删除缓存,它就会工作。在这里找到解决方案: 解决方案是将app.php第二个参数中的行从“false”更改为“true”:
$kernel = new AppKernel('prod', true);
我不明白为什么,但至少它现在起作用了
编辑:
这暂时解决了这个问题,但我后来发现这个问题是另一个端点中的一个bug。在控制台中检查路由时,只解析注释,因此它们会显示出来。但是,在构建缓存时,一个错误将阻止引擎继续运行。打开调试似乎可以在出现错误的情况下写入缓存
我现在已经修复了错误,关闭了调试,一切正常!: 切勿编辑缓存目录中的文件。那只是为了加快整个过程。您的缓存目录中是否存在权限问题?请参阅关于设置权限。另一个猜测:您已经编辑了产品缓存,而app:debug可能可以在dev缓存上工作。检查您的环境,app/console cache:clear-env=prod和app/console cache:clear-env=dev。我只是编辑了它,看看它是否能解决问题,它确实解决了!UserController文件中已经建立了许多其他路由——所有这些路由都是在缓存文件中自动生成的——只是我添加的那个路由不是吗?我是否需要向某个地方的单个路由添加特定权限?您是否清除了@k0pernikus提到的prod缓存?是否为此捆绑包启用了路由注释映射?是-完成了-它不起作用-正如我之前所说,所有路由都在缓存中重新创建,但我添加的路由除外?请发布您的routing.yml或routing_dev.yml文件?使用routing.yml编辑了我的问题-感谢您的关注。实际上,在某些情况下,这是问题的解决方案。我认为您不想在prod env中激活调试。php-app/console-env=prod-router:debug和php-app/console-router:match-env=prod/api/user/pushsettings的输出是什么?@skroczek-参见原始问题。当我运行这些命令时,会显示路径。是的,在dev环境中,内核也处于调试模式,但不在prod环境中。顺便说一句,您是否检查了缓存文件夹的权限?@skroczek-在dev/prod环境中相同。这不是权限,因为所有文件都是在缓存文件夹中创建的。问题是,除了我在上面做了更改外,没有显示新路线。
$kernel = new AppKernel('prod', true);