小编Ste*_*ant的帖子

添加集合/实体使表单渲染变得非常慢

我正在使用Symfony2表单生成器来制作表单.一切都运作良好,但表现很糟糕.一个简单的表单(只是几个文本字段)在大约1000毫秒内呈现,但是对于实体或集合字段,它会减慢到大约7500-10000毫秒.

我正在使用query_builder(with createQueryBuilder())选项,就像文档中的这个例子一样.添加集合或实体字段会使应用程序变得非常缓慢,但我不知道为什么.

探查 Controller占用大部分时间,因此Doctrine部分(192个查询)或Twig部分似乎不是问题.剥离树枝模板没有帮助.我已经尝试了一些改进(缓存),但这也没有帮助.

如何改进(或者:确切地说明问题的确切位置)这段代码的性能?

php performance profiling symfony doctrine-orm

5
推荐指数
1
解决办法
1940
查看次数

使用复合主键生成自动增量ID

我想给一个实体(发票,订单,预订等)一个唯一的序列号,但在那一年内只是唯一的.因此,每年(或其他字段,如客户)启动的第一张发票的ID为1.这意味着可以有复合主键(年份,ID)或一个主键(即invoice_id)和另外两个列.独特的.

我的问题:使用Doctrine2和Symfony2为对象提供自动生成的ID和其他值的唯一组合的最佳方法是什么?

复合键的学说限制

Doctrine不能将自动生成的ID分配给具有复合主键的实体(http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html) :

具有复合键的每个实体都不能使用除"ASSIGNED"之外的id生成器.这意味着ID字段必须在调用之前设置其值EntityManager#persist($entity).

手动设置序列号

所以我必须手动分配ID.为了做到这一点,我试图在某一年寻找最高的ID并给新ID + 1的实体.我怀疑这是最好的方式,即使它是,我还没有找到最好的( DRY)这样做的方法.由于我认为这是一个通用问题,我想防止XY问题,我已经开始提出这个问题了.

香草选择:仅限MyISAM

我基于这个答案找到了'vanilla'MySQL/MyISAM解决方案:

CREATE TABLE IF NOT EXISTS `invoice` (
  `year` int(1) NOT NULL,
  `id` mediumint(9) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`year`,`id`)
) ENGINE=MyISAM;
Run Code Online (Sandbox Code Playgroud)

由于Doctrine2的局限性,这是行不通的,所以我正在寻找一个类似于这个vanilla MySQL解决方案的Doctrine ORM.

其他方案

InnoDB也有一个解决方案:在MySQL中使用自动增量定义复合键

php mysql sql symfony doctrine-orm

5
推荐指数
1
解决办法
2325
查看次数

使用新语法转换 php 数组

我正在寻找一种方法(regex、snippet、plugin 等)来使用 sublimeText 使用新的 php 语法转换旧数组。

// Old synthax
$var = array(
   'foo' => 'bar' 
);

// New synthax
$var = [
   'foo' => 'bar'
];
Run Code Online (Sandbox Code Playgroud)

有人有想法吗?

php sublimetext sublimetext2 sublimetext3 sublime-text-plugin

5
推荐指数
2
解决办法
2133
查看次数

hive0.13.1中的hive-site.xml路径

我是新手.我想知道版本中的hive-site.xmlhive-default.xml文件位置hive-0.13.1.

hive0.13.1-bin从以下位置下载了版本. http://apache.mirrors.pair.com/hive/hive-0.13.1/

提取并配置hive环境变量.
我能够运行命令(create table, show, load data, query table..).

但在conf(/hive/hive-0.13-1/conf)目录中,我没有看到hive-site.xmlhive-default.xml文件.

这些文件位于hive-0.13.1版本中的哪个位置?

hive hiveql

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

“会话开始后无法设置会话 ID。” 在测试表单时

我正在为我的应用程序编写单元测试。我编写了一个函数来登录不同的用户(以测试用户级别)和一个函数来生成有效或无效的表单数据(以测试我的表单处理)。

当测试提交表单时,会抛出异常:

Uncaught PHP Exception LogicException: "Cannot set session ID after the session has started."
Run Code Online (Sandbox Code Playgroud)

我正在使用 Symfony 2.6.4。我找不到有关此错误消息的任何有用信息。不久前,该测试运行良好。

class ControllerTest extends WebTestCase
{
    public $client = null;
    public $route = 'home/';

    /**
     * @var \Doctrine\ORM\EntityManager
     */
    public $em;

    public function setUp()
    {
        self::bootKernel();
        $this->client = static::createClient();

        $this->em = static::$kernel->getContainer()
            ->get('doctrine')
            ->getManager()
        ;
    }

    public function logIn($role = 'admin')
    {
        if ($role === 'admin') {
            $userId = 20;
        } elseif ($role === 'user') {
            $userId = 29;
        }
        $user = $this->em->getRepository('Acme\DemoBundle\Entity\User')->find($userId); …
Run Code Online (Sandbox Code Playgroud)

php phpunit unit-testing symfony

5
推荐指数
1
解决办法
1580
查看次数

Symfony Form 将变量选项从 Collection 传递到 FormType

我有一个集合类型:

->add('tipi', CollectionType::class, array(
                'entry_type' => TipiType::class,
                'allow_add' => true,
                'prototype' => true,
                'mapped' => false,
                'entry_options' => array(
                    'required' => true,
                    'label' => false,
                )
            ))
Run Code Online (Sandbox Code Playgroud)

扩展此表单类型:

->add('tipi', EntityType::class, array(
      'label' => 'Tipo',
      'class' => 'AppBundle:Tipi',
      'attr' => array('class' => 'form-control'),
      'query_builder' => function (EntityRepository $er) {
          return $er->createQueryBuilder('t')
                    ->innerJoin('t.requests', 'r')
          ;
      },
  ));
Run Code Online (Sandbox Code Playgroud)

在第一种表单类型中,我有一个从控制器发送的选项,如下所示:

$idRequest = $request->get('id');
$form = $this->createForm(RequestsType::class, $requests, array(
    'id_request' => $idRequest
));
Run Code Online (Sandbox Code Playgroud)

在第一个中我可以使用它,但在子 FormType 中则不能。我会在集合类型中传递这个变量。我怎样才能做到这一点?

$form = $this->createForm(new YourForm($options), $class);
Run Code Online (Sandbox Code Playgroud)

php forms symfony-forms symfony

5
推荐指数
0
解决办法
1384
查看次数

创建'Ajaxified'表单字段类型

在我的应用程序中,我有几个表单字段有很多选项.我遇到的问题类似于这个问题:在每个页面加载时获取和解析所有选项都很昂贵(Twig一遍又一遍地渲染所有选项,而没有客户端缓存可能).这个问题让我创建了一种通过AJAX将选项发送到浏览器的方法.相当简单的方法:

  1. 通过AJAX获取所有选项(键值)(例如通过获取/countries.json)并尽可能缓存.(在这种情况下,国家名称不太可能经常变化)
  2. 使用selectize,select2或类似的插件将选项插入DOM.
  3. 享受更快的表格:-)

为了防止Symfony查询所有选项(不必要:它们通过AJAX加载)我添加setMaxResults(0)QueryBuilder表单加载时(通过控制器添加选项).是的,这是kludge.提交表单时,它仍将执行查询,因为它必须验证所选选项是否存在(并检查约束).

我想创建一个自定义表单字段类型,将此功能添加到当前EntityType:不要在呈现表单时加载选项,但仍检查所选选项是否存在.我发现了许多动态修改表单相关的示例,但是我没有找到与仅修改一个表单字段相关的示例,而与其父表单无关.

如何创建这样的表单字段类型?什么是一个很好的起点?扩展EntityType,ChoiceType或其他的方法呢?

我已经在使用Symfony 3.1了,所以使用延迟加载表单选项(Symfony 3.2中的新功能)不会有问题.不确定这个新功能是否与我的问题有关.

ajax symfony-forms symfony

5
推荐指数
1
解决办法
663
查看次数

Symfony 和 Doctrine 元数据缓存

我正在尝试优化我的 Symfony 应用程序性能,我关注了这些帖子:

我“担心”这些行:

doctrine:
    orm:
        entity_managers:
            default:
                metadata_cache_driver: apc
                query_cache_driver: apc
                result_cache_driver: apc
Run Code Online (Sandbox Code Playgroud)

它们是否可以安全使用,或者在部署后我必须小心处理它们?我正在清除缓存php app/console cache:clear --env=prod --no-debug,是否也需要清除 APC 缓存?

php caching apc symfony doctrine-orm

5
推荐指数
1
解决办法
6309
查看次数

Symfony 5 - 需要信号量扩展(sysvsem)

我已经实现了全新的 Symfony 身份验证系统:https : //symfony.com/doc/current/security/experimental_authenticators.html

我添加了新的登录限制:https : //symfony.com/blog/new-in-symfony-5-2-login-throttling

一切都已正确配置。

我还安装了 RateLimiter 组件,它创建了一个环境变量:

LOCK_DSN=semaphore
Run Code Online (Sandbox Code Playgroud)

但我有一个问题。首先,登录限制似乎被忽略了一半。一旦超出限制,我就没有错误消息。另一方面,如果我尝试使用良好的凭据进行连接,则会出现以下错误:

需要信号量扩展 (sysvsem)。

我尝试安装信号量组件(https://symfony.com/doc/current/components/semaphore.html

但同样的问题。

这是我的security.yaml

LOCK_DSN=semaphore
Run Code Online (Sandbox Code Playgroud)

我搜索了是否有要添加到 PHP 的扩展,但找不到任何内容。所以我不知道该怎么办。我在 Windows 10 上

php components symfony symfony-ratelimiter

5
推荐指数
1
解决办法
1223
查看次数

无法在Cucumber中运行功能

我在Cucumber中运行功能时遇到问题,这个功能非常基础,因为它来自教程.

它没有定义,如下:

Feature: Proof that my concept works

Scenario: My first test
 Given this is my first step
 When this is my second step
 Then this is my final step
Run Code Online (Sandbox Code Playgroud)

我的Cucumber跑步者课程如下:

 package cucumber;
 import org.junit.runner.RunWith;
 import cucumber.api.junit.Cucumber;

 @RunWith(Cucumber.class)
 @Cucumber.Options(
    format = {"pretty", "json:target/"},
    features = {"src/cucumber/"}
    )
 public class CucumberRunner {

 }
Run Code Online (Sandbox Code Playgroud)

.jar我在项目中的外部文件如下:

图片

我得到的例外是:

线程"main"中的异常cucumber.runtime.CucumberException:无法使用[cucumber.runtime.io.MultiLoader@75d837b6]实例化公共cucumber.runtime.java.JavaBackend(cucumber.runtime.io.ResourceLoader)

我试图在网上寻找解决这个问题的方法,但没有运气.

我也讨论了教程的OP,我还在等待反馈,但已经有一段时间了.

java exception cucumber cucumber-jvm

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