繁体   English   中英

为什么无法识别路线?

[英]Why is route not recognized?

我以前没有使用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 }

在router:debug中,我可以看到路由:

pushsettings                            ANY      ANY    ANY  /api/user/pushsettings            

但这不在缓存文件中生成

你不应该修改这个(自动生成 - 这是)由专人文件。 只要清除/删除您的缓存,它就可以工作。

在这里找到解决方案:

在生产中找不到symfony 2条路线

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

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

我不明白为什么,但至少现在可以了!

编辑:

这暂时解决了该问题,但后来我发现该问题是另一个端点中的错误。 在控制台中检查路由时,仅解析注释,因此它们会显示出来。 但是,在构建缓存时,错误将阻止引擎继续运行。 开启调试似乎可以使高速缓存在发生错误的情况下也能被写入。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM