gsokol / date-time-provider-bundle
Symfony扩展包,用于`gsokol/date-time-provider`库
1.0.0
2017-09-08 15:54 UTC
Requires
- php: ^7.0
- gsokol/date-time-provider: ^1.0.1
- symfony/config: ^3.0 || ^4.0
- symfony/dependency-injection: ^3.0 || ^4.0
- symfony/http-kernel: ^3.0 || ^4.0
Requires (Dev)
- phpunit/phpunit: ^6.0.0
This package is not auto-updated.
Last update: 2024-09-24 18:03:00 UTC
README
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')); } }
但是如果你注入提供者
// 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()); } }