在 docker 容器中的 Symfony 5 上找不到 "GET /user" 的路由
No route found for "GET /user" on Symfony 5 in docker container
为了创建网络服务,我创建了一个新项目,其中包含一个容器 php-nginx 用于网络服务器,postgresql-13 用于 db,所以我基于 FROM php:7.4-fpm-alpine
为 php-nging 容器创建我的 Dockerfile,为我的开发创建 docker-compose.yml。
在 运行 容器之前,我在本地(主机在 Ubuntu Bionic 下)文件夹和 运行 make:entity user
和 make:crud User
中创建了 symfony squeleton 以获得基本视图。
在 运行 容器之后,我尝试打开 url localhost:8000/user 并且它 returns :
No route found for "GET /user"
我用 php bin/console debug:router
检查我的本地(主机),它 returns :
…
user_index GET ANY ANY /user/
user_new GET|POST ANY ANY /user/new
user_show GET ANY ANY /user/{id}
路线似乎没问题
但是如果我在容器中做同样的事情,用户就没有路由。
问题是为什么路由在主机中是正确的而不是在 docker 容器中?
所以我连接到容器 docker exec -it my-web-container sh
,
然后测试创建一个新实体... php bin/console make:entity test
并查看 src/Controller
中的路由
注释不同:
/**
* @Route("/test")
*/
class TestController extends AbstractController
对于用户:
#[Route('/user')]
class UserController extends AbstractController
原因是即使我使用 Ubuntu 仿生默认 PHP 7.2,我最近更新到 PHP 7.4(使用 ppa:ondrej/php)支持…它更新为 PHP-8 !当我从主机 make:entity 时,它使用新的 PHP 8 注释而不是 Doctrine 注释,请查看 https://symfony.com/blog/new-in-symfony-5-2-php-8-attributes 了解更多详细信息。
解决方案 1:将我的容器切换到 PHP8
通过更改为 FROM php:8-fpm-alpine
来更新我的容器
解决方案 2:继续使用 Doctrine 注释
但它需要 make:entity 在容器内……或者手动编写……但也许有一个配置来定义我们想要保留原则注释?
为了创建网络服务,我创建了一个新项目,其中包含一个容器 php-nginx 用于网络服务器,postgresql-13 用于 db,所以我基于 FROM php:7.4-fpm-alpine
为 php-nging 容器创建我的 Dockerfile,为我的开发创建 docker-compose.yml。
在 运行 容器之前,我在本地(主机在 Ubuntu Bionic 下)文件夹和 运行 make:entity user
和 make:crud User
中创建了 symfony squeleton 以获得基本视图。
在 运行 容器之后,我尝试打开 url localhost:8000/user 并且它 returns :
No route found for "GET /user"
我用 php bin/console debug:router
检查我的本地(主机),它 returns :
…
user_index GET ANY ANY /user/
user_new GET|POST ANY ANY /user/new
user_show GET ANY ANY /user/{id}
路线似乎没问题
但是如果我在容器中做同样的事情,用户就没有路由。
问题是为什么路由在主机中是正确的而不是在 docker 容器中?
所以我连接到容器 docker exec -it my-web-container sh
,
然后测试创建一个新实体... php bin/console make:entity test
并查看 src/Controller
注释不同:
/**
* @Route("/test")
*/
class TestController extends AbstractController
对于用户:
#[Route('/user')]
class UserController extends AbstractController
原因是即使我使用 Ubuntu 仿生默认 PHP 7.2,我最近更新到 PHP 7.4(使用 ppa:ondrej/php)支持…它更新为 PHP-8 !当我从主机 make:entity 时,它使用新的 PHP 8 注释而不是 Doctrine 注释,请查看 https://symfony.com/blog/new-in-symfony-5-2-php-8-attributes 了解更多详细信息。
解决方案 1:将我的容器切换到 PHP8
通过更改为 FROM php:8-fpm-alpine
解决方案 2:继续使用 Doctrine 注释
但它需要 make:entity 在容器内……或者手动编写……但也许有一个配置来定义我们想要保留原则注释?