如何解决在 Docker 容器中的 Symfony 5 上找不到“GET /user”的路由
为了创建一个 web 服务,我创建了一个新项目,容器 php-nginx 用于 web 服务器,postgresql-13 用于 db,所以我创建了我的基于 FROM php:7.4-fpm-alpine
的 Dockerfile 用于 php-nging 容器和 docker-compose.yml 用于我的开发。
之前为了运行容器,我在本地(Ubuntu Bionic 下的主机)文件夹中创建了 symfony squeleton 并运行 make:entity user
和 make:crud User
以获得基本视图。
运行容器后,我尝试打开 url localhost:8000/user 并返回:No route found for "GET /user"
我用 php bin/console debug:router
检查我的本地(主机),它返回:
…
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
原因是,即使我使用默认 PHP 7.2 的 Ubuntu 仿生,我最近更新到 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:将我的容器切换到 PHP 8
通过更改为 FROM php:8-fpm-alpine
解决方案 2:继续使用 Doctrine 注释
但是它需要在容器内创建:实体……或者手动编写它……但是也许有一个配置来定义我们想要保留到学说注释?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。