- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
自从我将 Docker 更新到最新版本后,我在 symfony 中遇到了 Autowiring 问题。
我不完全确定这里的因果关系,但可以肯定的是,我的问题仅在更新我的 docker 后才开始出现。由于是这种情况,我显然试图恢复到以前的 docker 版本,但仍然遇到与新版本相同的问题。这就是我怀疑因果关系的原因。
我现在在:Docker 版本 3.5.2 和 Docker 引擎 v20.10.7
docker-engine 配置是不变的配置:
{
"registry-mirrors": [],
"insecure-registries": [],
"debug": false,
"experimental": false,
"features": {
"buildkit": true
},
"builder": {
"gc": {
"enabled": true,
"defaultKeepStorage": "20GB"
}
}
}
当我开始我的第一个项目时,我遇到了 Composer 没有读取我的 lib 文件夹的问题。这已按如下所述解决,但它可能会提供更多见解、上下文和我检查/完成的事情
起初我想到了这个Windows env variable . las,它已设置,所以这不是问题。其次,我的想法是文件所有权或文件权限,但也不是问题。我容器中的所有内容都归 root 所有,并具有 rwx 权限。第三,我认为这可能是因为我必须安装新的 WSL2 后端。直到更新那天,我仍然在 Hyper-V 后端上运行。幸运的是,docker 中有一个设置,您可以在其中关闭 WSL-2 的使用并恢复到 Hyper-V,但这也不是我问题的解决方案。
我的 composer.json 看起来像这样:
"autoload": {
"classmap": [
"scripts/composer/ScriptHandler.php",
"lib/",
...
],
"psr-4": {
...
}
},
除(某些)lib 文件外的所有内容都出现在我的 autoload_classmap.php 中摆弄了太久之后,我终于尝试了以下方法,突然我第一个项目中的问题消失了
"autoload": {
"classmap": [
"scripts/composer/ScriptHandler.php",
"lib/*",
...
],
"psr-4": {
...
}
},
我仍然不明白为什么第一个不起作用。自臭名昭著的更新以来,它一直工作到本周四。
现在进入第二个项目,我真的不知道发生了什么,我也不知所措。我的同事们似乎也搞不清楚问题出在哪里。第二个项目是最近的项目,所以不再加载类映射,一切都遵循 PSR-4 标准。
这是 composer.json 的自动加载部分:
"autoload": {
"psr-4": {
"App\\": "src/",
"Project\\": "scripts/"
}
},
这是我的 services.yaml(这些只是标准的 symfony 设置 AFAIK):
services:
# default configuration for services in *this* file
_defaults:
autowire: true # Automatically injects dependencies in your services.
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
public: false # Allows optimizing the container by removing unused services; this also means
# fetching services directly from the container via $container->get() won't work.
# The best practice is to be explicit about your dependencies anyway.
# makes classes in src/ available to be used as services
# this creates a service per class whose id is the fully-qualified class name
App\:
resource: '../src/*'
exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'
这是我的 docker PHP 容器:
php:
container_name: "${DOCKER_PROJECT_NAME}_php"
environment:
COLUMNS: 80
PHP_FPM_GROUP: wodby
PHP_FPM_USER: wodby
PHP_SENDMAIL_PATH: "/usr/sbin/sendmail -t -i -S mailhog:1025"
PHP_DEFAULT_CHARSET: 'utf-8'
PHP_DATE_TIMEZONE: 'UTC'
PHP_UPLOAD_MAX_FILESIZE: '10M'
PHP_POST_MAX_SIZE: '10M'
PHP_DISPLAY_ERRORS: 'On'
PHP_DISPLAY_STARTUP_ERRORS: 'On'
PHP_MAX_EXECUTION_TIME: '30000'
PHP_MAX_INPUT_TIME: '60'
PHP_MAX_INPUT_VARS: '2000'
PHP_ERROR_REPORTING: 'E_ALL'
PHP_LOG_ERRORS: 'On'
PHP_LOG_ERRORS_MAX_LEN: '0'
PHP_MEMORY_LIMIT: '512M'
PHP_SESSION_GC_MAXLIFETIME: '700000'
PHP_REALPATH_CACHE_SIZE: '4096K'
PHP_REALPATH_CACHE_TTL: '3600'
PHP_XHPROF: $PROFILING_ENABLED
env_file:
- .env
image: "wodby/php:7.4-dev-4.16.2"
volumes:
- "./:/var/www/html"
## For php profiler traces
- "files:/mnt/files"
启动时出现以下运行时异常:
Cannot autowire service "App\Form\Wizard\DaysOffType": argument "$daycareTransformer" of method "__construct()" references class "App\Form\DaycareTransformer" but no such service exists.
这个类不是新的,它已经写了 2 年了。它在正确的文件夹中并且命名空间是正确的。 src 文件夹也包含在 autoload_psr4.php 中。
根据 psr4 命名空间约定,“找不到”的 DaycareTransformer 位于命名空间 App\Form 下的 src/Form 中
<?php
namespace App\Form;
use App\Entity\Daycare;
use App\Service\DaycareService;
use Symfony\Component\Form\DataTransformerInterface;
use Symfony\Component\Form\Exception\TransformationFailedException;
class DaycareTransformer implements DataTransformerInterface
{
private $daycareService;
public function __construct(DaycareService $daycareService)
{
$this->daycareService = $daycareService;
}
...
}
最近没有对此代码进行任何更改。不是注入(inject)了 DaycareTransformer 的 DaysOffType,也不是 DaycareTransformer。
我是唯一遇到这些问题的人,因为我是唯一一个在 Windows 机器上运行 Docker 的人。生产和 QA 环境都已启动并运行,因此代码中没有结构性问题。
最佳答案
这可能是因为在这种情况下运行 symphony 的项目位于 Windows 分区(C: 或 D: 或您窗口内的任何位置)而不是 Linux 发行版。
如果您正在使用 WSL(最有可能),您应该始终将 Linux 相关项目存储在您的发行版中(在我的情况下是 Ubuntu,我存储它 ~/...)。使用 WSL 时,您不应将 Linux 相关项目存储在/mnt/... 中。
当我说“Linux 相关”时,我指的是任何通常希望在 Linux 环境或使用 docker 上运行的项目
不知道这是否可以为其他人解决问题,因为这个问题可能有多种原因。但这就是我解决问题的方式。
关于php - 自 docker 更新以来的 Symfony Autowiring 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68389624/
我开始从事一个用 Symfony 2.8 编写的大型项目。将整个项目升级到 SF 3 需要数百小时,现在还不可能。我想到了一个想法,将 symfony/symfony 包解压到它替换的单个包中(com
我在提交表单后使用 FOSUserEvents,但订阅者调用了两次。 这样我的验证码第一次有效第二次无效 这是我的代码 router = $router; $this->request
我有以下路线: blog_show: path: /test/123 defaults: { _controller: TotalcanBravofillBundle:Te
我是测试新手。我想测试我的功能。我已经成功安装了 phpUnit。我在互联网上查看了许多教程。但我无法获得有关测试的正确信息。这是我的功能代码: public function loginAction
我正在尝试重现 facebook batch requests 的行为在他们的图形 api 上运行。 所以我认为最简单的解决方案是在 Controller 上向我的应用程序发出几个请求,例如: pub
在 Symfony Progress Bar documentation有一个超酷酒吧的示例图像。不幸的是,看起来文档的其余部分没有解释如何获得这样的结果。 这是图片,以防您错过: 我怎么才能得到它?
我使用Finder发送假脱机电子邮件,但是自动名称生成器将点放在文件名中,有时它们出现在文件的开头。 查找程序似乎无法获取具有该名称的文件-那些文件被隐藏了……有人经历过这种行为吗?有什么建议如何使用
我正在尝试进行 LDAP 身份验证,我目前遇到此类错误: ServiceNotFoundException: The service "security.firewall.map.context.ma
有没有办法验证和检查集合数组是否为空。我已经尝试过: /** * @Assert\NotBlank() * @Assert\Length( min = 1) */ protected $work
使用Smyfony2和Doctrin2,可以使用以下示例创建数据固定装置:http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/i
我看到在大多数Symfony 2示例中,例如,不存在记录时,Symfony 2会引发异常。我认为这种方法对最终用户不友好。为什么有人更喜欢引发异常而不在Flashbag上添加一些错误消息? 最佳答案
我对项目中的以下服务有疑问: app.security.guardAuthenticatorLoginPassword: class: AppBundle\Security\LoginPa
symfony缓存和登录Docker容器存在问题。 Web服务器从www-data用户和组执行,当我使用docker上安装的php从docker容器中清除symfony缓存时,它从root执行。 因此
我想了解 symfony 中的服务 我已阅读http://symfony.com/doc/2.3/book/service_container.html#creating-configuring-se
因为我对 Symfony 和 Doctrine 还很陌生,所以我有一个可能很愚蠢的问题;-) 有人可以用简单的词语向我解释集合(尤其是实体中的ArrayCollections)吗?它是什么以及何时以及
我收到了这个表格: {{ form_start(form) }} {{ form_end(form) }} 我想检查用户是否登录,我这样做了: {% if is_g
我的网站已准备好部署,我正在尝试将其设置为在线。 一些信息: 主持人是 OVH。 它不允许 SSH,我必须使用 FTP 发送文件。也没有命令行。 我现在希望能够在子目录中设置网站:/www/test(
过去几个月以来,我一直在尝试与symfony合作。昨晚我自动删除了不需要的存储库。之后,我无法使用symfony命令创建新的symfony项目。当我在终端中运行Symfony new Security
In the environnement variable, then in system variable, I edited the path and added在环境变量中,然后在系统变量
我们有一个 Symfony 1.4 应用程序,想升级到 Symfony 4。是否有可能或者我们必须重新编程该应用程序? 我们询问了我们附近的一家软件公司,他们告诉我们必须重新编写应用程序。 最佳答案
我是一名优秀的程序员,十分优秀!