gsokol/date-time-provider-bundle

Symfony扩展包,用于`gsokol/date-time-provider`库

安装次数: 170

依赖者: 0

建议者: 0

安全: 0

星星: 0

关注者: 2

分支: 0

开放问题: 0

类型:symfony-bundle

1.0.0 2017-09-08 15:54 UTC

This package is not auto-updated.

Last update: 2024-09-24 18:03:00 UTC


README

Build Status

Symfony扩展包,用于gsokol/date-time-provider库。

安装

通过composer安装

composer require gsokol/date-time-provider-bundle

并在app/AppKernel.php

// app/AppKernel.php

// ...
class AppKernel Extends Kernel
{
    // ...
    public function registerBundles()
    {
        $bundles = [
            // ...
            new GSokol\DateTimeProviderBundle\DateTimePorviderBundle(),
            // ...
        ];
        // ...

使用方法

贪婪请求DateTime

doSomeStaff();
$timeOfRequestProcessionStart = $container->get('date-time-provider.greedy')->getRequestTime();

懒请求DateTime

someLognOperation();
$currentTime = $container->get('date-time-provider.lazy')->getRequestTime();

间隔

$tomorrow = $container->get('date-time-provider.lazy')->getNewRequestTime()
    ->add(new \DateInterval('P1d'));

优点

让我们思考,你有一个应该返回下一个小时DateTime的类方法。类似于这样

class NextHour
{
    public function get()
    {
        return (new \DateTime())
            ->add(new \DateInterval('PT1h'));
    }
}

现在我们需要为它编写单元测试。哎呀,:hankey:

但是如果你注入提供者

// class

use GSokol\DateTimeProvider\DateTimeProviderInterface;

class NextHour
{
    /**
     * @var DateTimeProviderInterface
     */
    private $dtProvider;

    public function __construct(DateTimeProviderInterface $dtProvider)
    {
        $this->dtProvider = $dtProvider;
    }

    public function get()
    {
        return $this->dtProvider->getCurrentTime()
            ->add(new \DateInterval('PT1h'));
    }
}
// test

use GSokol\DateTimeProvider\DateTimeProviderInterface;
use PHPUnit\Framework\TestCase;

class NextHourTest extends TestCase
{
    public function testGet()
    {
        $dtStub = (new \DateTime())->setTimestamp(0);
        $dtExp = (new \DateTime())->setTimestamp(3600);
        $dtProvider = $this->getMockBuilder(DateTimeProviderInterface)
            ->disableOriginalConstructor()
            ->setMethods(['getCurrentTime'])
            ->getMock();
        $dtProvider->expects($this->once())
            ->method('getCurrentTime')
            ->will($this->returnValue($dtStub));

        $target = new NextHour($dtProvider);

        $this->assertEquals($dtExp, $target->get());
    }
}

:+1: