-1

为了创建 Web 服务,我创建了一个新项目,其中包含用于 Web 服务器的容器php-nginx 、用于 db 的postgresql-13,因此我基于FROM php:7.4-fpm-alpinephp-nging 容器和 docker-compose.yml 创建了我的 Dockerfile 用于我的开发.
以前为了运行容器,我在我的本地(Ubuntu Bionic 下的主机)文件夹中创建了 symfony squeleton 并运行make:entity usermake: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 容器中?

4

1 回答 1

-1

所以我连接到容器docker exec -it my-web-container sh
然后测试创建一个新实体……并在src/Controllerphp bin/console make:entity test中查看路由

注释不同:

/**
 * @Route("/test")
 */
class TestController extends AbstractController

对于用户:

#[Route('/user')]
class UserController extends AbstractController

原因是即使我使用带有默认 PHP 7.2 的 Ubuntu 仿生,我最近也更新到了 PHP 7.4(使用 ppa:ondrej/php)支持……并且它更新到了 PHP-8!当我从主机制作:实体时,它使用新的 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 注释

但它需要在容器内制作:实体......或者手动编写它......但也许有一个配置来定义我们想要保留在教义注释中?

于 2021-04-02T10:34:12.903 回答