Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么路线不被识别?_Php_Symfony - Fatal编程技术网

Php 为什么路线不被识别?

Php 为什么路线不被识别?,php,symfony,Php,Symfony,我以前没有使用过symfony2,但继承了一些我正在尝试添加的代码 我已将新路由添加到UserController: 当我运行./app/console router:debug时,我可以看到路由已被识别 . 然而,当我试图通过浏览器访问路由时,我得到了404 通过查看日志文件,我追踪到 cache/prod/appProdUrlMatcher.php 此文件是自动生成的,但由于某些原因,此处未生成我的路线 手动编辑此文件已解决此问题-但为什么在此处不自动生成路线?我错过什么了吗 如果我随后清

我以前没有使用过symfony2,但继承了一些我正在尝试添加的代码

我已将新路由添加到UserController:

当我运行./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            

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

您不应该手动编辑该文件,因为它是自动生成的。只要清除/删除缓存,它就会工作。

在这里找到解决方案:

解决方案是将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);