标签: symfony4

Symfony 4 - 服务被删除或内联,虽然它是公开的

我正在尝试使用新的目录结构和所有内容将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)

有任何想法吗?

dependency-injection symfony symfony-flex symfony4

10
推荐指数
4
解决办法
6203
查看次数

在DEV中,Symfony 4非常缓慢

我尝试在docker容器上运行一个简单的Symfony 4项目.我已经测试了常规PHP脚本,并且它们运行良好.但是,使用Symfony项目,执行变得非常缓慢.例如,没有任何重要内容的页面需要5-6秒.

我附上了Symfony的性能分析器的截图.

Screenshot1 Screenshot2 Screenshot3 Screenshot4

您是否知道如何将执行时间缩短到可接受的水平?

php symfony docker symfony4

10
推荐指数
3
解决办法
4382
查看次数

在symfony4中为redis设置无键前缀

我在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键是不同的.

任何帮助赞赏.

php redis symfony predis symfony4

10
推荐指数
1
解决办法
750
查看次数

Symfony 4处理null DateType表单字段

我在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)

forms symfony4

10
推荐指数
4
解决办法
5468
查看次数

锁文件不是最新的 composer.json 中的最新更改

我正在尝试克隆一个 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 composer-php symfony-process symfony4

10
推荐指数
3
解决办法
2万
查看次数

错误:无法找到路径"/ login_check"的控制器.路由配置错误.(LexikJWTAuthentication)

描述

当我对运行在其上的symfony服务器执行正常请求时http://localhost:8000/api/admin/login_check,返回所需的jwt令牌.

但是,当我使用功能测试(with ./bin/phpunit)时,我收到以下错误:

错误:无法找到path \"/ api/admin/login_check \"的控制器.路由配置错误.

我还浏览了功能测试文档.

Bug转载

不要犹豫克隆或分叉这个项目进行测试.有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)

php phpunit functional-testing lexikjwtauthbundle symfony4

10
推荐指数
1
解决办法
610
查看次数

如何使用 Symfony Mailer 组件禁用“verify_peer”?

我正在配置一个带有自签名证书的邮件服务器(后缀),而且这个自签名证书似乎是 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 配置文件)。

php symfony symfony4 symfony-mailer

10
推荐指数
2
解决办法
4299
查看次数

Symfony 4在Windows上非常慢

我已经在Windows 10上使用Symfony 作为我的项目几年(SF2,SF3),我最近搬到了Symfony 4来建立一个新项目但是表演是灾难性的.

Symfony初始化时间为5到25秒,如本例所示 例

控制台也是如此:例如一个cache:clear可以持续1分钟.

我搜索了类似的困难和问题的Symfony文档和论坛,我已经测试了推荐的优化(增加一些值??opcache,启用APCu,禁用xdebug,添加realpath_cache_sizephp.ini,使用作曲类地图功能),但在我的情况下,它不会改变任何东西.

这是我对APCu的phpinfo: APCu 和Opcache: opcache

我使用的是PHP 7.1.9,Apache 2.4.27,MariaDB 10.2.8.

是否有人有同样的问题和/或想法?

php performance symfony windows-10 symfony4

9
推荐指数
1
解决办法
2446
查看次数

Symfony 4生产模式ErrorHandling页面内存耗尽

我将项目设置为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)

php symfony symfony4

9
推荐指数
1
解决办法
2924
查看次数

如何使用学说 ORM 在 Symfony 中设置初始数据(不是测试数据)

我是学习 Symfony(Symfony 4.1.6)的新手,无法弄清楚这一点。

我有一个数据库,它包含许多用于填充 htmlselect类型输入的表格。它们在数据库中以确保其他记录中的外键约束。

有没有办法将这些数据“添加”到数据库中并进行跟踪?(通过 git)还是​​我应该只保留“插入”的 SQL 文件

我看过灯具,但它们似乎主要用于虚拟数据。我想插入真实数据。如果有的话,什么是“最佳实践”?

****更新****
我应该补充一点,这个项目的开发是在 Symfony 之外开始的,所以数据库已经用少量记录手动创建了。我曾经bin/console doctrine:mapping:import 'App\Entity' annotation --path=src/Entity构建实体。

是否有类似的方法也可以从数据库中“吸出”少数记录?

也许我只需要手动将 SQL 插入语句添加到第一个(或第二个)迁移文件中。

php doctrine symfony symfony4

9
推荐指数
1
解决办法
4576
查看次数