小编Xat*_*too的帖子

PEAR和Composer有什么区别?

PEAR用于安装PHP软件包,Composer用于同样的事情.我相信Composer能更好地处理依赖关系,但这是唯一的区别吗?任何人都可以解释这两个包管理器之间的区别并告诉我何时使用哪个?

php pear package composer-php

31
推荐指数
1
解决办法
9834
查看次数

使用repositoryMethod的Doctrine ODM OneToOne双向引用

如何使用Doctrine ODM创建一对一的双向引用,在使用除主键之外的字段进行引用时延迟加载?

我在MongoDB中有两个文档,Article和ArticleMetaData.对于每个文章文档,都有一个ArticleMetaData,反之亦然.(OneToOne双向关系.)由于遗留原因,这两种文档类型需要位于不同的集合中.两个集合都由不了解Mongo ID的外部系统更新.然而,它们包含共享字段"groupcode",可用于将正确的文章与其元数据相匹配.

我尝试以这样的方式配置Doctrine,即我可以从其元数据对象获取文章对象和文章的元数据,但我想让它们延迟加载.(当我不需要时,不需要查询另一端.)

映射如下:

Foo\BarBundle\Document\Article:
    repositoryClass: Foo\BarBundle\Repository\ArticleRepository
    changeTrackingPolicy: DEFERRED_EXPLICIT
    collection: article
    type: document
    fields:
        id:
            id: true
        groupcode:
            type: int
            index: true
            unique:
                order: asc
        ...
    referenceOne:
        metaData:
            targetDocument: Foo\BarBundle\Document\ArticleMetaData
            mappedBy: groupcode
            repositoryMethod: findOneByArticle

Foo\BarBundle\Document\ArticleMetaData:
    repositoryClass: Foo\BarBundle\Repository\ArticleMetaDataRepository
    changeTrackingPolicy: DEFERRED_EXPLICIT
    collection: article_meta
    fields:
        id:
            id: true
        groupcode:
            type: int
            index: true
            unique:
                order: asc
        ...
    referenceOne:
        article:
            targetDocument: Foo\BarBundle\Document\Article
            mappedBy: groupcode
            repositoryMethod: findOneByMetaData
Run Code Online (Sandbox Code Playgroud)

以及上面提到的存储库方法:

// In the ArticleRepository
public function findOneByMetaData(ArticleMetaData $metadata)
{
    $article = $this
        ->createQueryBuilder()
        ->field('groupcode')->equals($metadata->getGroupcode())
        ->getQuery() …
Run Code Online (Sandbox Code Playgroud)

php mongodb symfony doctrine-orm doctrine-odm

8
推荐指数
1
解决办法
410
查看次数

在一段时间不活动后,在PHP CLI脚本中运行功能

我使用Symfony2和RabbitMqBundle来创建一个向ElasticSearch发送文档的worker.以一对一的速率索引文档比使用ElasticSearch批量API慢得多.因此,我创建了一个缓冲区,以1000个为一组将文档刷新到ES.代码看起来(稍微简化)如下:

class SearchIndexator
{
    protected $elasticaService;
    protected $buffer = [];
    protected $bufferSize = 0;

    // The maximum number of documents to keep in the buffer.
    // If the buffer reaches this amount of documents, then the buffers content
    // is send to elasticsearch for indexation.
    const MAX_BUFFER_SIZE = 1000;

    public function __construct(ElasticaService $elasticaService)
    {
        $this->elasticaService = $elasticaService;
    }

    /**
     * Destructor
     *
     * Flush any documents that remain in the buffer.
     */
    public function __destruct()
    {
        $this->flush();
    } …
Run Code Online (Sandbox Code Playgroud)

php rabbitmq symfony reactphp

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

在 GO 中捕获重复组

我正在尝试创建一个可以解析由大写单词后跟零个或多个封装在双引号中的参数组成的字符串的函数。

例如,以下每一行:

COPY "filename one" "filename two"
REMOVE "filename"
LIST "x" "y" "z"
DISCONNECT
Run Code Online (Sandbox Code Playgroud)

结果应该是一个字符串(命令),后跟一个字符串[](引号内的参数)。我创建了以下正则表达式:

re1, _ := regexp.Compile(`([A-Z]+)(?: "([^"]+)")*`)
results := re1.FindAllStringSubmatch(input, -1)
Run Code Online (Sandbox Code Playgroud)

然而,无论我如何尝试,只有最后一个参数被捕获。

我的问题的一个例子:https ://play.golang.org/p/W1rE1X4SWf5

"arg1"本例中未捕获。我缺少什么?

regex go

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

基于对缓存对象的引用来查询文档

我有两种类型的对象UserCompany其数据存储在MongoDB集合user和中companyUser包含对的引用Company。我可以在UserRepository中使用以下代码查询用户:

$this
  ->createQueryBuilder()
  ->field('employer')->references($company);
Run Code Online (Sandbox Code Playgroud)

Company但是,它是一个使用率很高的对象,使用Redis进行缓存。当不存在缓存时,一切正常。但是当从缓存中获取公司实例时。教义的工作单元不了解实例。因此,执行上面的代码将导致以下错误:

Cannot create a DBRef for class App\Document\Company without an identifier. Have you forgotten to persist/merge the document first?
Run Code Online (Sandbox Code Playgroud)

我发现从Redis提取公司信息后,我可以使用黑客将该公司注册到该工作部门:

$company = $this->fetchFromCache($params);
$documentManager->getUnitOfWork()->registerManaged($company, $company->getId(), []);
Run Code Online (Sandbox Code Playgroud)

但是,这看起来很丑。有没有一种方法可以查询用户而不必让Doctrine知道Company对象或更改我的数据模型?

php doctrine doctrine-odm

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

在Symfony内核初始化上运行代码

在启动Symfony2内核后,如何在bundle中执行某些代码?

  • 必须在处理请求或运行控制台命令之前运行代码.
  • 即使内核在其生命周期内处理多个请求,代码也必须执行一次.
  • 代码必须能够访问捆绑包配置.因此,它可能不会在过程的早期运行.

我需要这个的原因是我需要注册一个流包装器.我需要能够使用bundle配置,因为流包装器定义是在config中定义的.

我尝试了以下方法:

  • 实现bundle类的构造函数.(这不起作用,此时并非所有捆绑包都已初始化)
  • kernel.request和创建事件侦听器console.command(当内核在其生命周期内处理多个请求时,这将导致代码多次执行.)

php symfony

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

PHPUnit:获取equalTo断言以忽略属性

我有以下PHPUnit测试用例:

    $mailer = $this->getMockBuilder(MailerInterface::class)->getMock();
    $simpleMailer = new SimpleMailer($mailer);

    $message = (new Message())
        ->setTo($user)
        ->setFrom($from)
        ->setSubject($subject)
        ->setTemplate(SimpleMailer::TEMPLATE)
        ->setContext(['message' => $body]);

    if ($bcc) { $message->addBcc($bcc); }

    $mailer
        ->expects($this->once())
        ->method('send')
        ->with($this->equalTo($message));

    $simpleMailer->sendMessage($user, $subject, $body, $from, $bcc);
Run Code Online (Sandbox Code Playgroud)

在更改Message类之前,此方法一直工作良好。Message类现在在构造上设置一个唯一的ID,这意味着它equalTo现在返回false,具有以下区别:

 MailerBundle\Document\Message Object (
-    'id' => '5a372f3c-a8a9-4e1e-913f-d756244c8e52'
+    'id' => '11176427-7d74-4a3c-8708-0026ae666f8b'
     'type' => null
     'user' => Tests\TestUser Object (...)
     'toName' => ''
     'toAddress' => null
     'domain' => null
     'fromName' => null
     'fromAddress' => 'user@example.org'
     'bccAddresses' => Array (...)
     'subject' => 'subject'
     'textBody' => null …
Run Code Online (Sandbox Code Playgroud)

php phpunit

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

如何使用MongoDB PHP扩展获取光标结果计数

mongoPHP扩展赞成不赞成的mongodb扩展。此扩展名与一起使用mongo-php-library

在旧扩展中,可以使用MongoCursor :: count()从光标获取结果计数。但是,新游标MongoDB \ Driver \ Cursor没有这种方法。对MongoDB执行查询后,从中获取结果数量的新方法是什么?

php mongodb php-mongodb

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