为什么路线无法识别?

时间:2015-08-28 11:54:36

标签: php symfony

之前我没有使用过symfony2,但是继承了一些我想添加的代码。

我添加了一条到UserController的新路线:

/**
 * @Route("/pushsettings", name="pushsettings", defaults={"_format"="json"})
 * @View()
 */
public function pushsettingsAction(Request $request) {
    ...
}

当我运行./app/console router:debug时,我可以看到路线被识别 。 但是当我尝试通过浏览器访问路由时,我得到了404。

通过查看日志文件,我已将其追溯到

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            

但这不是在缓存文件中生成的

2 个答案:

答案 0 :(得分:0)

您不应手动编辑该文件(它是自动生成的)。只需清除/删除缓存即可。

答案 1 :(得分:-1)

在这里找到解决方案:

symfony 2 routes not found in production

解决方案是更改app.php中的行(第二个参数从' false'到' true'):

$kernel = new AppKernel('prod', true);

我不明白为什么,但至少它现在有用了!

<强> 编辑:

这暂时解决了这个问题,但我后来发现问题是不同端点的错误。在控制台中检查路由时,仅解析注释,以便显示它们。但是,在构建缓存时,错误将阻止引擎继续运行。打开调试似乎可以在不发生错误的情况下写入缓存。

我现在修复了错误,关闭了调试,一切正常! :)

相关问题