我正在尝试使用新的目录结构和所有内容将SF 3.3应用程序迁移到SF 4.
我在这个例外上苦苦挣扎:
编译容器时,"simplethings_entityaudit.reader"服务或别名已被删除或内联.您应该将其公开,或者直接停止使用容器并改为使用依赖注入.
(此服务来自/ vendor中的外部包).
然而,当我bin/console debug:container simplethings_entityaudit.reader看到服务存在并且是公开的时候:
Information for Service "simplethings_entityaudit.reader" ========================================================= ----------------- -------------------------------------- Option Value ----------------- -------------------------------------- Service ID simplethings_entityaudit.reader Class SimpleThings\EntityAudit\AuditReader Tags - Public yes Synthetic no Lazy no Shared yes Abstract no Autowired no Autoconfigured no Factory Service simplethings_entityaudit.manager Factory Method createAuditReader ----------------- --------------------------------------
此服务目前在我自己的一个中调用$this->container->get('simplethings_entityaudit.reader').
我也尝试注入SimpleThings\EntityAudit\AuditReader我的服务构造函数,但这是我得到的:
方法"__construct()"的参数"$ auditReader"引用类"SimpleThings\EntityAudit\AuditReader"但不存在此类服务.它无法自动注册,因为它来自不同的根命名空间.
当我将services.yaml它添加到我的工作中时,我不应该这样做:
SimpleThings\EntityAudit\AuditReader:
alias: simplethings_entityaudit.reader
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我尝试在docker容器上运行一个简单的Symfony 4项目.我已经测试了常规PHP脚本,并且它们运行良好.但是,使用Symfony项目,执行变得非常缓慢.例如,没有任何重要内容的页面需要5-6秒.
我附上了Symfony的性能分析器的截图.

您是否知道如何将执行时间缩短到可接受的水平?
我在Symfony 4中正确配置redis时遇到问题.我希望在缓存项目键之前没有前缀,但它会不断显示.这是我的config/packages/framework.yaml(与缓存相关的部分):
cache:
prefix_seed: ztw/ztw
app: cache.adapter.redis
default_redis_provider: '%env(resolve:REDIS_URL)%'
Run Code Online (Sandbox Code Playgroud)
我试图删除prefix_seed键并将其值设置为~.没有任何效果.但是,文档说明其默认值为null.
我想实现这一点,因为当我通过网站启动我的网站时,它设置了一些关键并坚持下去.但是当我运行我的behat测试(故意 - 填充缓存)时 - 密钥是不同的,无论如何.两者都使用APP_ENV=dev环境变量值(检查两次).
以下是redis方面的情况:
127.0.0.1:6379> keys *
1) "xw+Y6oICD-:4dfbddf6bbb8ea2e25e843d936739dd9"
2) "xw+Y6oICD-:4f1cbb7ece6f8db3b69ae11418bbf022"
3) "xw+Y6oICD-:26c65dcee950a5020596989ad1a8ff66"
4) "gUbUjDoAuQ:b712bf9832f566bd5bd30a07e7bd146b"
5) "gUbUjDoAuQ:1d0f56bf67bd482674b62067336bd633"
6) "xw+Y6oICD-:d948f5e23f94e681620436786f0daf98"
7) "xw+Y6oICD-:ef88ab906981c6e04ef639cd4a8ae803"
8) "xw+Y6oICD-:748d18ce6ba0929d2540e9b4529e56cc"
9) "xw+Y6oICD-:ef30ff7e239b92cec1f5e58c201296f5"
10) "xw+Y6oICD-:1d0f56bf67bd482674b62067336bd633"
11) "xw+Y6oICD-:b712bf9832f566bd5bd30a07e7bd146b"
12) "xw+Y6oICD-:4da534491b5732336b3bb3e7302bc79b"
Run Code Online (Sandbox Code Playgroud)
例如,第4和第11项具有相同的键(和值)但不幸的是前缀不同.
我知道缓存键前缀被认为是一种很好的做法,但由于某种原因,在运行时,behat键是不同的.
任何帮助赞赏.
我在Symfony 4中有一个表单,我将DateType实现为文本字段
->add('DateOfBirth', DateType::class, array(
'required' => false,
'widget' => 'single_text',
'empty_data' =
))
Run Code Online (Sandbox Code Playgroud)
但是该字段是可选的,以填写表单.当我提交该字段的空值时,我收到错误:
期望类型为"DateTimeInterface"的参数,给出"NULL".
错误就行了
$form->handleRequest($request);
Run Code Online (Sandbox Code Playgroud)
看来我需要传入一个默认值(即 - 1/1/1990),因为null不是一个有效的DateTime值?处理这个问题的正确方法是什么?我查看了这个页面并尝试了各种各样的东西(即 - 改变输入类型)但似乎没有什么能解决这个问题.
提前致谢!
我的实体:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use NoProtocol\Encryption\MySQL\AES\Crypter;
/**
* @ORM\Entity(repositoryClass="App\Repository\PatientsRepository")
* @ORM\Table(name="Patients")
*/
class PatientSearch
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="integer")
*/
private $PatientId;
/**
* @ORM\Column(type="string", length=100, nullable=true)
*/
private $Address1;
/**
* @ORM\Column(type="string", length=100, nullable=true)
*/
private $Address2;
/**
* @ORM\Column(type="string", …Run Code Online (Sandbox Code Playgroud) 我正在尝试克隆一个 github 存储库并composer install在其上发出一个。但我得到了这个:
警告:锁定文件不是最新的 composer.json 中的最新更改。您可能会得到过时的依赖项。运行更新以更新它们。
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Conclusion: remove symfony/polyfill-intl-icu v1.9.0
- Installation request for symfony/polyfill-intl-icu v1.9.0 -> satisfiable by symfony/polyfill-intl-icu[v1.9.0].
- Conclusion: remove symfony/process v3.4.15
- symfony/polyfill-intl-icu v1.9.0 requires symfony/intl ~2.3|~3.0|~4.0 -> satisfiable by symfony/symfony[v4.0.0].
- don't install symfony/process v3.4.15|remove symfony/symfony v4.0.0
- don't install symfony/symfony v4.0.0|don't install symfony/process v3.4.15
- Installation request for symfony/process v3.4.15 -> satisfiable by symfony/process[v3.4.15].
Run Code Online (Sandbox Code Playgroud)
跑步时 composer …
当我对运行在其上的symfony服务器执行正常请求时http://localhost:8000/api/admin/login_check,返回所需的jwt令牌.
但是,当我使用功能测试(with ./bin/phpunit)时,我收到以下错误:
错误:无法找到path \"/ api/admin/login_check \"的控制器.路由配置错误.
我还浏览了功能测试文档.
不要犹豫克隆或分叉这个项目进行测试.有README.md解释安装步骤.
我还能够通过克隆lexikjwtauthenticationbundle的创建者之一提供的工作示例来重现该bug.
运行时发生 ./bin/phpunit
[2019-01-31 09:37:49] request.INFO: Matched route "api_admin_login_check". {"route":"api_admin_login_check","route_parameters":{"_route":"api_admin_login_check"},"request_uri":"http://localhost/api/admin/login_check","method":"POST"} []
[2019-01-31 09:37:49] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
[2019-01-31 09:37:49] request.WARNING: Unable to look for the controller as the "_controller" parameter is missing. [] []
Run Code Online (Sandbox Code Playgroud)
执行curl或postman请求时发生
[2019-01-29 21:16:26] request.INFO: Matched route "api_admin_login_check". {"route":"api_admin_login_check","route_parameters":{"_route":"api_admin_login_check"},"request_uri":"https://localhost:8000/api/admin/login_check","method":"POST"} []
[2019-01-29 21:16:27] doctrine.DEBUG: SELECT t0.id AS id_1, t0.email …Run Code Online (Sandbox Code Playgroud) 我正在配置一个带有自签名证书的邮件服务器(后缀),而且这个自签名证书似乎是 Symfony Mailer 组件的一个问题。
在 Swiftmailer 上,使用一些配置,例如:
transport:
stream_options:
ssl:
allow_self_signed: true
Run Code Online (Sandbox Code Playgroud)
或者
stream_options:
ssl:
verify_peer: false
verify_peer_name: false
Run Code Online (Sandbox Code Playgroud)
可能会修复它,但我找不到在邮件程序上执行此操作的方法(如果可能,我想使用 YAML 配置文件)。
我已经在Windows 10上使用Symfony 作为我的项目几年(SF2,SF3),我最近搬到了Symfony 4来建立一个新项目但是表演是灾难性的.
Symfony初始化时间为5到25秒,如本例所示

控制台也是如此:例如一个cache:clear可以持续1分钟.
我搜索了类似的困难和问题的Symfony文档和论坛,我已经测试了推荐的优化(增加一些值??opcache,启用APCu,禁用xdebug,添加realpath_cache_size的php.ini,使用作曲类地图功能),但在我的情况下,它不会改变任何东西.
这是我对APCu的phpinfo:
和Opcache: 
我使用的是PHP 7.1.9,Apache 2.4.27,MariaDB 10.2.8.
是否有人有同样的问题和/或想法?
我将项目设置为prod模式,.env除了自定义错误页面之外的所有内容似乎都有效.
我有这个作为我的404枝条模板:
{# templates/bundles/TwigBundle/Exception/error404.html.twig #}
{% include 'builder/layout/header.html.twig' with {'title': '404'} %}
<img src="{{ assets('img/not-found.jpeg') }}" class="img-responsive"
id="error-not-found-img" />
<div class="http-error-msg-container">
<h1>404! Page Not Found</h1>
<p>Don't despair, go back to <a href="{{ path('dashboard') }}">Home</a> and try again.</p>
</div>
{% include 'builder/layout/footer.html.twig' %}
Run Code Online (Sandbox Code Playgroud)
并转到一个不存在的页面(比如说/dashboard/giorgoirdjfisejf)返回一个空白页面.所以我把它添加到我的index.php文件中:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(-1);
Run Code Online (Sandbox Code Playgroud)
显示错误,我得到了这个:
致命错误:第107行/var/www/solomon/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php中允许的内存大小为134217728字节(试图分配20480字节)
致命错误:在第1行的/var/www/solomon/vendor/symfony/debug/Exception/OutOfMemoryException.php中,允许的内存大小为134217728字节(试图分配32768字节)
我不太清楚为什么这会导致错误并且无法调试.var/log/prod.log没有显示任何内容,如何解决或更好,我该如何调试?
谢谢
我的prod/monolog.yaml文件
monolog:
handlers:
main:
type: fingers_crossed
action_level: error
handler: nested
excluded_404s:
# regex: exclude all 404 …Run Code Online (Sandbox Code Playgroud) 我是学习 Symfony(Symfony 4.1.6)的新手,无法弄清楚这一点。
我有一个数据库,它包含许多用于填充 htmlselect类型输入的表格。它们在数据库中以确保其他记录中的外键约束。
有没有办法将这些数据“添加”到数据库中并进行跟踪?(通过 git)还是我应该只保留“插入”的 SQL 文件
我看过灯具,但它们似乎主要用于虚拟数据。我想插入真实数据。如果有的话,什么是“最佳实践”?
****更新****
我应该补充一点,这个项目的开发是在 Symfony 之外开始的,所以数据库已经用少量记录手动创建了。我曾经bin/console doctrine:mapping:import 'App\Entity' annotation --path=src/Entity构建实体。
是否有类似的方法也可以从数据库中“吸出”少数记录?
也许我只需要手动将 SQL 插入语句添加到第一个(或第二个)迁移文件中。
symfony4 ×10
symfony ×8
php ×7
composer-php ×1
docker ×1
doctrine ×1
forms ×1
performance ×1
phpunit ×1
predis ×1
redis ×1
symfony-flex ×1
windows-10 ×1