├── conf ├── .gitignore ├── listener.php ├── routes.php ├── providers.php ├── application.ini └── application.ini.example ├── storage └── logs │ └── .gitignore ├── tests ├── README.md ├── Bootstrap.php └── controllers │ └── IndexTest.php ├── app ├── library │ ├── helpers.php │ └── README.md ├── views │ ├── index │ │ └── index.phtml │ ├── view │ │ └── test.phtml │ └── error │ │ └── error.phtml ├── modules │ ├── Web │ │ ├── views │ │ │ ├── blade │ │ │ │ └── test.blade.php │ │ │ ├── twig │ │ │ │ └── test.twig │ │ │ ├── index │ │ │ │ ├── Test.phtml │ │ │ │ └── hello.phtml │ │ │ └── layout.phtml │ │ ├── controllers │ │ │ ├── Index.php │ │ │ ├── Blade.php │ │ │ └── Twig.php │ │ └── Bootstrap.php │ ├── Example │ │ └── controllers │ │ │ ├── User.php │ │ │ ├── Autoload.php │ │ │ ├── Index.php │ │ │ ├── Application.php │ │ │ ├── View.php │ │ │ ├── Model.php │ │ │ ├── Registry.php │ │ │ ├── Config.php │ │ │ ├── Response.php │ │ │ ├── Route.php │ │ │ └── Request.php │ ├── Api │ │ └── controllers │ │ │ └── Index.php │ ├── Admin │ │ └── controllers │ │ │ └── Index.php │ └── Console │ │ └── controllers │ │ ├── Response.php │ │ ├── Demo.php │ │ └── Daemon.php ├── actions │ └── user │ │ └── add.php ├── services │ └── User.php ├── models │ └── User.php ├── controllers │ ├── User.php │ ├── Index.php │ ├── Route.php │ ├── Ab.php │ └── Error.php ├── plugins │ ├── MysqlQueryLog.php │ ├── ModuleBootstrap.php │ └── Sample.php ├── defines │ └── Code.php └── Bootstrap.php ├── .gitignore ├── README.md ├── Makefile ├── nginx.conf ├── public └── index.php ├── server.php ├── bin ├── console └── run ├── phpunit.xml ├── LICENSE ├── composer.json └── composer.lock /conf/.gitignore: -------------------------------------------------------------------------------- 1 | application.ini -------------------------------------------------------------------------------- /storage/logs/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore -------------------------------------------------------------------------------- /tests/README.md: -------------------------------------------------------------------------------- 1 | ## 参考 2 | 3 | http://www.01happy.com/yaf-phpunit/ -------------------------------------------------------------------------------- /app/library/helpers.php: -------------------------------------------------------------------------------- 1 | "; 3 | echo "Content is: " . $content; 4 | ?> 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | ## 注意 3 | 4 | 本项目已迁移至:[https://github.com/1024casts/yaf-skeleton](https://github.com/1024casts/yaf-skeleton) 5 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | 2 | usage = you can use: make test, make clean 3 | 4 | echo: 5 | @echo $(usage) 6 | test: 7 | cd tests && ./vendor/phpunit/phpunit/phpunit 8 | -------------------------------------------------------------------------------- /app/views/view/test.phtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | <?php echo $title;?> 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/modules/Web/views/blade/test.blade.php: -------------------------------------------------------------------------------- 1 | hello , {{ $name }} ! 2 | -------------------------------------------------------------------------------- /app/library/README.md: -------------------------------------------------------------------------------- 1 | ## 项目库文件放在这里 2 | 3 | ## 或者也可以使用下面的项目(推荐) 4 | 5 | [https://github.com/qloog/yaf-library](https://github.com/qloog/yaf-library) 6 | 7 | > 主要是通过 Composer下载, 然后通过启动程序Bootstrap自动加载 Composer 生成的 autoload.php 到框架里。 -------------------------------------------------------------------------------- /app/views/error/error.phtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Error 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/actions/user/add.php: -------------------------------------------------------------------------------- 1 | getRequest()->getParam('uid')); 9 | } 10 | } -------------------------------------------------------------------------------- /nginx.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name domain.com; 4 | root document_root; 5 | index index.php index.html index.htm; 6 | 7 | if (!-e $request_filename) { 8 | rewrite ^/(.*) /index.php/$1 last; 9 | } 10 | } 11 | 12 | -------------------------------------------------------------------------------- /app/modules/Example/controllers/User.php: -------------------------------------------------------------------------------- 1 | disableView(); 9 | echo 'init...'; 10 | } 11 | 12 | } -------------------------------------------------------------------------------- /app/services/User.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | Welcome to Yaf! 4 | 5 | 6 |

twig: {{ content }}

7 | 8 | {% for user in users %} 9 | * {{ user.name }} 10 | {% else %} 11 | No users have been found. 12 | {% endfor %} 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | bootstrap()->run(); 10 | -------------------------------------------------------------------------------- /app/modules/Api/controllers/Index.php: -------------------------------------------------------------------------------- 1 | autoRender(false); 10 | $data = ['uid'=>1, 'name' => 'test']; // 你的业务数据 11 | $this->success($data); 12 | } 13 | } -------------------------------------------------------------------------------- /app/modules/Example/controllers/Autoload.php: -------------------------------------------------------------------------------- 1 | disableView(); 10 | 11 | Yaf\Loader::import(APP_PATH . '/library/helper.php'); 12 | 13 | test(); 14 | 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/modules/Example/controllers/Index.php: -------------------------------------------------------------------------------- 1 | get(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/modules/Admin/controllers/Index.php: -------------------------------------------------------------------------------- 1 | autoRender(false); 14 | //Yaf\Dispatcher::getInstance()->disableView(); 15 | } 16 | 17 | public function indexAction() 18 | { 19 | echo 'Hello World!'; 20 | } 21 | } -------------------------------------------------------------------------------- /tests/Bootstrap.php: -------------------------------------------------------------------------------- 1 | bootstrap(); 10 | 11 | $loader = require dirname(__DIR__) . '/vendor/autoload.php'; 12 | $loader->addPsr4("Tests\\", __DIR__); 13 | -------------------------------------------------------------------------------- /app/modules/Example/controllers/Application.php: -------------------------------------------------------------------------------- 1 | getConfig(); 12 | 13 | // modules 14 | Yaf\Application::app()->getModules(); 15 | 16 | // dispatcher 17 | Yaf\Application::app()->getDispatcher(); 18 | 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /conf/listener.php: -------------------------------------------------------------------------------- 1 | handler or event => [handler1, handler2, ...] 7 | // 处理handler: 8 | // handler => closure function like function (Event $event, mixed $source, mixed $eventData) {...} 9 | 10 | 'payment' => [ 11 | // \App\Services\Listener\Payment::class, 12 | ], 13 | 'flow:delay' => [ 14 | // [\App\Services\Listener\Flow::class, 'handleEvent'] 15 | ], 16 | ]; 17 | -------------------------------------------------------------------------------- /server.php: -------------------------------------------------------------------------------- 1 | getView()->assign('title', 'test title'); 9 | $this->getView()->assign('content', 'test content'); 10 | 11 | 12 | $data = [ 13 | 'title' => 'test title.', 14 | 'content' => 'test content.' 15 | ]; 16 | $this->getView()->display('view/test.phtml', $data); 17 | } 18 | } -------------------------------------------------------------------------------- /app/models/User.php: -------------------------------------------------------------------------------- 1 | disableView(); 10 | } 11 | 12 | /** 13 | * 使用 Eloquent ORM 14 | */ 15 | public function mysqlAction() 16 | { 17 | //$user = UserModel::find(2); 18 | //echo $user->toJson(); 19 | 20 | //$users = UserModel::get(); 21 | $users = UserModel::where('email','=', 'test@test.com')->get(); 22 | 23 | echo $users->toJson(); 24 | } 25 | 26 | } -------------------------------------------------------------------------------- /app/plugins/MysqlQueryLog.php: -------------------------------------------------------------------------------- 1 | userModel = new UserModel(); 16 | } 17 | 18 | public function EloquentAction() 19 | { 20 | $users = $this->userModel->all()->toArray(); 21 | var_dump($users); 22 | $user = $this->userModel->find(1); 23 | var_dump($user); 24 | exit; 25 | } 26 | } -------------------------------------------------------------------------------- /app/modules/Example/controllers/Registry.php: -------------------------------------------------------------------------------- 1 | 'Peter']); 10 | 11 | var_dump(Yaf\Registry::get('test')); 12 | 13 | var_dump(Yaf\Registry::has('test')); 14 | 15 | var_dump(Yaf\Registry::del('test')); 16 | 17 | var_dump(Yaf\Registry::has('test')); 18 | 19 | var_dump(Yaf\Registry::get('phpcasts')); // NULL 20 | 21 | var_dump(Yaf\Registry::get('config')); 22 | } 23 | } -------------------------------------------------------------------------------- /app/defines/Code.php: -------------------------------------------------------------------------------- 1 | '参数错误', 19 | self::SERVER_BUSY => '服务繁忙, 请稍后再试', 20 | self::NOT_ALLOW => '不允许访问', 21 | self::AUTH_FAILED => '用户未登录', 22 | ]; 23 | } 24 | -------------------------------------------------------------------------------- /app/modules/Web/controllers/Index.php: -------------------------------------------------------------------------------- 1 | assign('message', 'Hello Yaf'); 30 | 31 | $this->display('test'); 32 | } 33 | } -------------------------------------------------------------------------------- /app/modules/Web/views/index/Test.phtml: -------------------------------------------------------------------------------- 1 | extend('../layout') ?> 2 | 3 | block->begin('title', 'append')?> 4 | - 我是前端 5 | block->end('title')?> 6 | 7 | block->begin('style') ?> 8 | 9 | block->end('style') ?> 10 | 11 | block->begin('header') ?> 12 | 我是新header
13 | block->end('header') ?> 14 | 15 | block->begin('content') ?> 16 | 我是content
17 | 18 | block->end('content') ?> 19 | 20 | block->begin('script', 'append') ?> 21 | 22 | block->end('script') ?> 23 | -------------------------------------------------------------------------------- /app/modules/Web/controllers/Blade.php: -------------------------------------------------------------------------------- 1 | 'ZhangSan', 'age'=>18], ['name'=>'Lisi', 'age'=>20]]; 28 | 29 | $this->getView()->display("blade.test", compact('list','name')); 30 | 31 | exit; 32 | } 33 | } -------------------------------------------------------------------------------- /app/modules/Web/controllers/Twig.php: -------------------------------------------------------------------------------- 1 | 'user1'], ['name'=>'user2'], ['name'=>'user3']]; 27 | 28 | $this->getView()->assign("content", $data); 29 | $this->getView()->assign("users", $users); 30 | } 31 | } -------------------------------------------------------------------------------- /conf/routes.php: -------------------------------------------------------------------------------- 1 | [ 10 | 'type' => 'regex', 11 | 'match' => '/news\/([\d]+)/', 12 | 'route' => [ 13 | 'module' => 'Home', 14 | 'controller' => 'News', 15 | 'action' => 'detail', 16 | ], 17 | 'map' => [ //参数 18 | '1' => 'id', 19 | ], 20 | ], 21 | 22 | // rewrite路由 23 | 'user' => [ 24 | 'type' => 'rewrite', 25 | 'match' => 'user/:id/', 26 | 'route' => [ 27 | 'module' => 'Home', 28 | 'controller' => 'user', 29 | 'action' => 'profile', 30 | ], 31 | ], 32 | ]; -------------------------------------------------------------------------------- /bin/console: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | add(new GenerateModule()); 20 | $application->add(new GenerateController()); 21 | $application->add(new GenerateModel()); 22 | $application->add(new GeneratePlugin()); 23 | $application->add(new Check()); 24 | $application->add(new ServeCommand()); 25 | 26 | $application->run(); -------------------------------------------------------------------------------- /app/plugins/ModuleBootstrap.php: -------------------------------------------------------------------------------- 1 | module == 'Index') { 21 | $request->module = 'Web'; 22 | } 23 | 24 | $bootsFile = APP_PATH . '/modules/' . $request->module . '/Bootstrap.php'; 25 | if (file_exists($bootsFile)) { 26 | Loader::import($bootsFile); 27 | Bootstrap::boot('\\' . $request->module . '\\Bootstrap'); 28 | } 29 | 30 | return true; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/modules/Web/views/layout.phtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <?php $this->block->begin('title')?>前端页面<?php $this->block->end('title')?> 6 | block->begin('head') ?>block->end('head') ?> 7 | block->begin('style') ?>block->end('style') ?> 8 | 9 | 10 | block->begin('header') ?> 11 | 12 | block->end('header') ?> 13 | block->begin('content') ?> 14 | 15 | block->end('content') ?> 16 | 17 | block->begin('footer') ?> 18 | 19 | block->end('footer') ?> 20 | 21 | block->begin('script') ?> 22 | 23 | block->end('script') ?> 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/modules/Example/controllers/Config.php: -------------------------------------------------------------------------------- 1 | getConfig(); 11 | 12 | // 默认是对象: object( yaf\config\ini) 13 | // $config->toArray() 转换为数组 14 | var_dump($config); 15 | exit; 16 | } 17 | 18 | public function method2Action() 19 | { 20 | // all 21 | $config = new Yaf\Config\Ini(APP_ROOT . '/conf/application.ini'); 22 | 23 | // section 24 | $config = new Yaf\Config\Ini(APP_ROOT . '/conf/application.ini', 'develop'); 25 | 26 | var_dump($config->toArray()); 27 | exit; 28 | } 29 | 30 | public function method3Action() 31 | { 32 | \Yaf\Registry::set('demo', ['id'=>1,'name'=>'test']); 33 | $config = \Yaf\Registry::get('demo'); 34 | 35 | var_dump($config); 36 | exit; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/plugins/Sample.php: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | ./tests 15 | 16 | 17 | 18 | 19 | 20 | application/ 21 | 22 | vendor/ 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /app/modules/Web/views/index/hello.phtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PHPCasts 6 | 7 | 8 | 9 | 38 | 39 | 40 |
41 |
42 |
Hello World!
43 |
44 |
45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 qloog 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "phpcasts/yaf-skeleton", 3 | "description": "yaf-skeleton", 4 | "keywords": ["yaf-skeleton","yaf","skeleton"], 5 | "license": "MIT", 6 | "type": "project", 7 | "minimum-stability": "dev", 8 | "require": { 9 | "php": ">=7.0.0", 10 | "ext-yaf": "*", 11 | "monolog/monolog": "^1.13", 12 | "guzzlehttp/guzzle": "^6.2", 13 | "pimple/pimple": "^3.0", 14 | "illuminate/Database": "^5.5", 15 | "illuminate/events": "^5.5", 16 | "twig/twig": "^3.0@dev", 17 | "illuminate/view": "^5.5", 18 | "phpcasts/yaf-library": "dev-master" 19 | }, 20 | "require-dev": { 21 | "phpunit/phpunit": "^6.3" 22 | }, 23 | "autoload": { 24 | "psr-4": { 25 | "App\\Exceptions\\": "app/exceptions", 26 | "App\\Services\\": "app/services", 27 | "App\\Defines\\": "app/defines" 28 | }, 29 | "files": [ 30 | "app/library/helpers.php" 31 | ] 32 | }, 33 | "repositories": { 34 | "packagist": { 35 | "type": "composer", 36 | "url": "https://packagist.org" 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/modules/Console/controllers/Response.php: -------------------------------------------------------------------------------- 1 | disableView(); 11 | } 12 | 13 | public function indexAction() 14 | { 15 | $response = $this->getResponse(); 16 | 17 | // output: Yaf_Request_Http 18 | echo "response class 所属实例: "; 19 | if ($response instanceof Response_Http) { 20 | echo "Yaf_Response_Http"; 21 | } else { 22 | echo "yaf_Response_Abstract"; 23 | } 24 | echo "
"; 25 | 26 | // Pro tips: 没传key的都用默认key: Response_Http::DEFAULT_BODY, 可以自定义 27 | $response->setBody("Hello World")->setBody('I am footer content', 'footer'); 28 | $response->prependBody("Prepend "); 29 | $response->appendBody(" Append "); 30 | 31 | var_dump($response->getBody()); //default 32 | var_dump($response->getBody(Response_Http::DEFAULT_BODY)); //same as above 33 | var_dump($response->getBody("footer")); 34 | var_dump($response->getBody(NULL)); //get all 35 | 36 | // $response->response(); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /bin/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | setModuleName('Console'); 20 | $request->setControllerName($commandFields[0]); 21 | $request->setActionName($commandFields[1]); 22 | } elseif ($fieldsCount == 3) { 23 | $request->setModuleName($commandFields[0]); 24 | $request->setControllerName($commandFields[1]); 25 | $request->setActionName($commandFields[2]); 26 | } else { 27 | echo 'Not found the command.'; 28 | exit(1); 29 | } 30 | 31 | for ($i = 2; $i < $argc; $i++) { 32 | $optionOrigin = $argv[$i]; 33 | if ($optionOrigin[0] !== '-') { 34 | echo 'Error option: ' . $optionOrigin; 35 | exit(1); 36 | } 37 | 38 | $option = explode('=', ltrim($optionOrigin, '-'), 2); 39 | $request->setParam($option[0], isset($option[1]) ? $option[1] : true); 40 | } 41 | 42 | $app = new \Yaf\Application(APP_ROOT . '/conf/application.ini', \Yaf\ENVIRON); 43 | $app->bootstrap()->getDispatcher()->dispatch($request); 44 | -------------------------------------------------------------------------------- /conf/providers.php: -------------------------------------------------------------------------------- 1 | PHPCasts\Yaf\Events\Manager::class, 8 | 9 | 'config' => function () { 10 | return \Yaf\Registry::get('config'); 11 | }, 12 | 13 | 'logger' => function () { 14 | // @todo more compatible 15 | if (strtolower(Yaf\Dispatcher::getInstance()->getRequest()->getModuleName()) == 'console' 16 | && getenv('LOG_TO_CONSOLE') 17 | ) { 18 | return new Monolog\Logger('console-name', [new Monolog\Handler\StreamHandler('php://output')]); 19 | } else { 20 | return new PHPCasts\Yaf\Log\LoggerWrapper(); 21 | } 22 | }, 23 | 24 | 'sessionBag' => function () { 25 | return new PHPCasts\Yaf\Caches\Memory(); 26 | }, 27 | 'session' => function () { 28 | return \Yaf\Session::getInstance(); 29 | }, 30 | 31 | /** ==============================custom setting============================== */ 32 | 33 | 'cache' => function ($c) { 34 | return new PHPCasts\Yaf\Caches\Redis($c['redis']); 35 | }, 36 | 37 | 'redis' => function ($c) { 38 | $config = $c['config']['redis']['default']; 39 | 40 | $redis = new \Redis(); 41 | $redis->connect($config['host'], $config['port'], $config['timeout']); 42 | 43 | return $redis; 44 | }, 45 | ]; 46 | -------------------------------------------------------------------------------- /app/modules/Console/controllers/Demo.php: -------------------------------------------------------------------------------- 1 | getRequest()->getParam('uid', 0); 24 | $username = $this->getRequest()->getParam('username'); 25 | 26 | if (!$uid) { 27 | $this->usage(); 28 | 29 | return; 30 | } 31 | 32 | // here write your the logic of business 33 | 34 | } 35 | 36 | public function usage() 37 | { 38 | global $argv; 39 | 40 | echo sprintf('Usage: %s %s -uid=123 [-username=user1]', $argv[0], $argv[1]), PHP_EOL; 41 | } 42 | 43 | /** 44 | * 测试 response/cli 45 | * 执行方法: php bin/run Demo/request 46 | */ 47 | public function requestAction() 48 | { 49 | var_dump(get_class_methods(Yaf\Request\Simple::class)); 50 | } 51 | 52 | /** 53 | * 测试 response/cli 54 | * 执行方法: php bin/run Demo/response 55 | */ 56 | public function responseAction() 57 | { 58 | var_dump(get_class_methods(Yaf\Response\Cli::class)); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /tests/controllers/IndexTest.php: -------------------------------------------------------------------------------- 1 | _application->getDispatcher()->returnResponse(true)->dispatch($request); 19 | $content = $response->getBody(); 20 | 21 | $this->assertEquals('index', $content); 22 | } 23 | 24 | /** 25 | * 测试index方法 26 | */ 27 | public function testJson() 28 | { 29 | $request = new \Yaf\Request\Simple("CLI", "Index", "Index", 'json'); 30 | $response = $this->_application->getDispatcher()->returnResponse(true)->dispatch($request); 31 | $content = $response->getBody(); 32 | 33 | //$this->assertEquals('json', $content); 34 | $this->assertJsonStringEqualsJsonString('{"uid":1,"username":"admin"}', $content); 35 | } 36 | 37 | public function testArray() 38 | { 39 | $request = new \Yaf\Request\Simple("CLI", "Index", "Index", 'json'); 40 | $response = $this->_application->getDispatcher()->returnResponse(true)->dispatch($request); 41 | $content = $response->getBody(); 42 | 43 | $content = json_decode($content, true); 44 | $this->assertArrayHasKey('uid', $content); 45 | } 46 | 47 | public function testEquality() { 48 | $this->assertEquals( 49 | [1, 2, 3, 4, 5, 6], 50 | ['1', 2, 33, 4, 5, 6] 51 | ); 52 | } 53 | 54 | public function testFailure() 55 | { 56 | $this->assertTrue(true); 57 | } 58 | } -------------------------------------------------------------------------------- /app/controllers/Index.php: -------------------------------------------------------------------------------- 1 | toJson(); 31 | Log::info('test', $this->getServer()); 32 | $this->getResponse()->setBody('index'); 33 | } 34 | 35 | public function jsonAction() 36 | { 37 | $json = json_encode(['uid'=>1,'username'=>'admin']); 38 | $this->getResponse()->setBody($json); 39 | } 40 | 41 | /** 42 | * 此处会报php error, setBody参数必须是string 43 | */ 44 | public function arrayAction() 45 | { 46 | //$this->getResponse()->setBody(['uid'=>1]); 47 | } 48 | 49 | /** 50 | * 使用 Eloquent ORM 51 | */ 52 | public function mysqlAction() 53 | { 54 | // 获取 55 | $user = UserModel::find(1); 56 | echo $user->toJson(); 57 | } 58 | 59 | public function pdoAction() 60 | { 61 | $client = new test(); 62 | $user = $client->find(41); 63 | dd($user); // dd 放到 64 | } 65 | 66 | public function test1Action() 67 | { 68 | $client = new YarClient( 69 | array( 70 | 'controller' => 'index', 71 | 'action' => 'getdata', 72 | ), 73 | array('args' => 'some parameters', 'format' => 'json', 'http://yaf-api.local/') 74 | ); 75 | $data = $client->api(); 76 | print_r($data); 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /app/modules/Example/controllers/Response.php: -------------------------------------------------------------------------------- 1 | disableView(); 12 | // see: http://www.laruence.com/manual/yaf.class.dispatcher.returnResponse.html 13 | Yaf\Dispatcher::getInstance()->returnResponse(true); 14 | } 15 | 16 | public function indexAction() 17 | { 18 | $response = $this->getResponse(); 19 | //$r = new ReflectionClass($response); 20 | //var_dump($r->getProperties()); 21 | 22 | // output: Yaf_Request_Http 23 | echo "response class 所属实例: "; 24 | if ($response instanceof Response_Http) { 25 | echo "Yaf_Response_Http"; 26 | } else { 27 | echo "yaf_Response_Abstract"; 28 | } 29 | echo "
"; 30 | 31 | // Pro tips: 没传key的都用默认key: Response_Http::DEFAULT_BODY, 可以自定义 32 | $response->setBody("Hello")->setBody(" World", "footer"); 33 | $response->prependBody("Prepend "); 34 | $response->appendBody(" Append "); 35 | $response->setHeader('Yaf-Version', "3.0.4"); 36 | //$response->setAllHeaders(['Yaf-Version' => "3.0.4", "PHP-Version" => 7.0]); 37 | //$response->setRedirect("http://www.baidu.com"); 38 | 39 | var_dump($response->getBody()); // default 40 | var_dump($response->getBody(Response_Http::DEFAULT_BODY)); // same as above 41 | var_dump($response->getBody("footer")); 42 | var_dump($response->getBody(NULL)); //get all 43 | 44 | $response->response(); 45 | } 46 | 47 | public function httpAction() 48 | { 49 | // 获取 Yaf\Response\Http 类中支持的方法 50 | var_dump(get_class_methods(Yaf\Response\Http::class)); 51 | } 52 | 53 | public function cliAction() 54 | { 55 | // 获取 Yaf\Response\Cli 类中支持的方法 56 | var_dump(get_class_methods(Yaf\Response\Cli::class)); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /app/controllers/Route.php: -------------------------------------------------------------------------------- 1 | disableView(); 11 | } 12 | /** 13 | * 静态路由 14 | * 15 | * @example: http://yaf-skel.com/example/route/static 16 | */ 17 | public function staticAction() 18 | { 19 | \Yaf\Dispatcher::getInstance()->disableView(); 20 | 21 | echo 'PHPCasts'; 22 | } 23 | 24 | /** 25 | * simple 路由 26 | * 27 | * @example: http://yaf-skel.com/index.php?m=example&c=route&a=simple 28 | */ 29 | public function simpleAction() 30 | { 31 | \Yaf\Dispatcher::getInstance()->disableView(); 32 | 33 | echo 'I am a simple route'; 34 | } 35 | 36 | /** 37 | * supervar 路由 38 | * 39 | * @example: http://yaf-skel.com/index.php?r=/example/route/supervar 40 | */ 41 | public function supervarAction() 42 | { 43 | \Yaf\Dispatcher::getInstance()->disableView(); 44 | 45 | echo 'I am a supervar route'; 46 | } 47 | 48 | /** 49 | * rewrite 路由 50 | * 51 | * @example: http://yaf-skel.com/product/iphone 52 | */ 53 | public function rewriteAction() 54 | { 55 | echo 'I am a rewrite route' . PHP_EOL; 56 | 57 | // 获取参数 58 | echo 'matched param: ' . $this->getRequest()->getParam('ident'); 59 | } 60 | 61 | /** 62 | * 正则路由 63 | * 64 | * @example: http://yaf-skel.com/product/1?a=1&b=2 65 | */ 66 | public function regexAction() 67 | { 68 | echo 'I am a regex route' . PHP_EOL; 69 | 70 | // 获取参数 71 | echo 'matched param: ' . $this->getRequest()->getParam('ident'); 72 | echo '
'; 73 | echo $this->getRequest()->getQuery('a'); 74 | echo $this->getRequest()->getQuery('b'); 75 | } 76 | 77 | /** 78 | * map 路由 79 | */ 80 | public function mapAction() 81 | { 82 | echo 'I am a map route' . PHP_EOL; 83 | exit; 84 | } 85 | 86 | /** 87 | * 自定义路由 88 | */ 89 | public function customAction() 90 | { 91 | 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /app/controllers/Ab.php: -------------------------------------------------------------------------------- 1 | disableView(); 11 | } 12 | 13 | public function indexAction() 14 | { 15 | echo 'I am a index'; 16 | } 17 | /** 18 | * 静态路由 19 | * 20 | * @example: http://yaf-skel.com/example/route/static 21 | */ 22 | public function staticAction() 23 | { 24 | \Yaf\Dispatcher::getInstance()->disableView(); 25 | 26 | echo 'PHPCasts'; 27 | } 28 | 29 | /** 30 | * simple 路由 31 | * 32 | * @example: http://yaf-skel.com/index.php?m=example&c=route&a=simple 33 | */ 34 | public function simpleAction() 35 | { 36 | \Yaf\Dispatcher::getInstance()->disableView(); 37 | 38 | echo 'I am a simple route'; 39 | } 40 | 41 | /** 42 | * supervar 路由 43 | * 44 | * @example: http://yaf-skel.com/index.php?r=/example/route/supervar 45 | */ 46 | public function supervarAction() 47 | { 48 | \Yaf\Dispatcher::getInstance()->disableView(); 49 | 50 | echo 'I am a supervar route'; 51 | } 52 | 53 | /** 54 | * rewrite 路由 55 | * 56 | * @example: http://yaf-skel.com/product/iphone 57 | */ 58 | public function rewriteAction() 59 | { 60 | echo 'I am a rewrite route' . PHP_EOL; 61 | 62 | // 获取参数 63 | echo 'matched param: ' . $this->getRequest()->getParam('ident'); 64 | } 65 | 66 | /** 67 | * 正则路由 68 | * 69 | * @example: http://yaf-skel.com/product/1?a=1&b=2 70 | */ 71 | public function regexAction() 72 | { 73 | echo 'I am a regex route' . PHP_EOL; 74 | 75 | // 获取参数 76 | echo 'matched param: ' . $this->getRequest()->getParam('ident'); 77 | echo '
'; 78 | echo $this->getRequest()->getQuery('a'); 79 | echo $this->getRequest()->getQuery('b'); 80 | } 81 | 82 | /** 83 | * map 路由 84 | */ 85 | public function mapAction() 86 | { 87 | echo 'I am a map route' . PHP_EOL; 88 | } 89 | 90 | /** 91 | * 自定义路由 92 | */ 93 | public function customAction() 94 | { 95 | 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /app/modules/Example/controllers/Route.php: -------------------------------------------------------------------------------- 1 | disableView(); 11 | } 12 | /** 13 | * 静态路由 14 | * 15 | * @example: http://yaf-skel.com/example/route/static 16 | */ 17 | public function staticAction() 18 | { 19 | \Yaf\Dispatcher::getInstance()->disableView(); 20 | 21 | echo 'PHPCasts'; 22 | } 23 | 24 | /** 25 | * simple 路由 26 | * 27 | * @example: http://yaf-skel.com/index.php?m=example&c=route&a=simple 28 | */ 29 | public function simpleAction() 30 | { 31 | \Yaf\Dispatcher::getInstance()->disableView(); 32 | 33 | echo 'I am a simple route'; 34 | } 35 | 36 | /** 37 | * supervar 路由 38 | * 39 | * @example: http://yaf-skel.com/index.php?r=/example/route/supervar 40 | */ 41 | public function supervarAction() 42 | { 43 | \Yaf\Dispatcher::getInstance()->disableView(); 44 | 45 | echo 'I am a supervar route'; 46 | } 47 | 48 | /** 49 | * rewrite 路由 50 | * 51 | * @example: http://yaf-skel.com/product/iphone 52 | * 53 | * http://yaf-skel.com/web/product/iphone 54 | * 55 | */ 56 | public function rewriteAction() 57 | { 58 | echo 'I am a rewrite route' . '
'; 59 | 60 | // 获取参数 61 | echo 'matched param: ' . $this->getRequest()->getParam('name'); 62 | } 63 | 64 | /** 65 | * 正则路由 66 | * 67 | * @example: http://yaf-skel.com/product/1/2?a=1 68 | */ 69 | public function regexAction() 70 | { 71 | echo 'I am a regex route' . PHP_EOL; 72 | 73 | // 获取参数 74 | echo 'id matched param: ' . $this->getRequest()->getParam('id'); 75 | echo 'tag id matched param: ' . $this->getRequest()->getParam('tag_id'); 76 | echo '
'; 77 | echo 'a value is:' . $this->getRequest()->getQuery('a'); 78 | } 79 | 80 | /** 81 | * map 路由 82 | */ 83 | public function mapAction() 84 | { 85 | echo 'I am a map route' . PHP_EOL; 86 | exit; 87 | } 88 | 89 | /** 90 | * 自定义路由 91 | */ 92 | public function customAction() 93 | { 94 | 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /app/controllers/Error.php: -------------------------------------------------------------------------------- 1 | getRequest()->getException(); 18 | $this->_view->setScriptPath(APP_PATH . '/views'); 19 | 20 | switch ($exception->getCode()) { 21 | case YAF\ERR\AUTOLOAD_FAILED: 22 | case YAF\ERR\NOTFOUND\MODULE: 23 | case YAF\ERR\NOTFOUND\CONTROLLER: 24 | case YAF\ERR\NOTFOUND\ACTION: 25 | case YAF\ERR\NOTFOUND\VIEW: 26 | if (strpos($this->getRequest()->getRequestUri(), '.css') !== false || 27 | strpos($this->getRequest()->getRequestUri(), '.jpg') !== false || 28 | strpos($this->getRequest()->getRequestUri(), '.js') !== false || 29 | strpos($this->getRequest()->getRequestUri(), '.png') !== false || 30 | strpos($this->getRequest()->getRequestUri(), '.ico') !== false || 31 | strpos($this->getRequest()->getRequestUri(), '.gif') !== false 32 | ) { 33 | header('HTTP/1.1 404 Not Found'); 34 | } 35 | $data = [ 36 | 'type' => '404', 37 | 'message' => 'Not Found!', 38 | 'debug' => '', 39 | ]; 40 | break; 41 | default: 42 | //记录错误日志 43 | Log::error( 44 | $exception->getMessage() . ' IN FILE ' . $exception->getFile() . ' ON LINE ' . $exception->getLine(), 45 | [$exception->getTraceAsString()] 46 | ); 47 | 48 | $data = [ 49 | 'type' => 'error', 50 | 'message' => '网络错误,请稍候再试!', 51 | 'debug' => '', 52 | ]; 53 | 54 | if ( 55 | $exception instanceof \PHPCasts\Exceptions\ArgumentException 56 | || $exception instanceof \PHPCasts\Exceptions\AuthException 57 | || $exception instanceof \PHPCasts\Exceptions\HttpException 58 | ) { 59 | $data['message'] = $exception->getMessage(); 60 | } 61 | 62 | if (isset($this->config['application']['showErrors']) && $this->config['application']['showErrors']) { 63 | $data['message'] = $exception->getMessage(); 64 | $data['debug'] = print_r($exception, true); 65 | } 66 | } 67 | $this->display('error', $data); 68 | } 69 | } -------------------------------------------------------------------------------- /conf/application.ini: -------------------------------------------------------------------------------- 1 | [common] 2 | application.directory = APP_PATH 3 | application.ext = "php" 4 | application.modules = Index,Web,Admin,Api,Console,Example 5 | application.dispatcher.defaultRoute = static 6 | application.dispatcher.throwException = true 7 | application.dispatcher.catchException = true 8 | ;application.baseUri = '' 9 | application.dispatcher.defaultModule = "index" 10 | application.dispatcher.defaultController = index 11 | application.dispatcher.defaultAction = index 12 | application.view.ext = "phtml" 13 | 14 | ; Layout 15 | application.library = APP_PATH "/library" 16 | application.layoutpath = APP_PATH "/views/" 17 | application.document = "layout.phtml" 18 | application.cache_config = 0 19 | ; twig engine 20 | ;application.view.engine = "twig" 21 | ;application.view.ext = "twig" 22 | ; blade engine 23 | ;application.view.engine = "blade" 24 | ;application.view.ext = "blade" 25 | 26 | ;twig 27 | twig.cache = STORAGE_PATH "/cache/view/twig" 28 | ;blade 29 | blade.cache = STORAGE_PATH "/cache/view/blade" 30 | 31 | ; Log 32 | log.level = debug 33 | log.channel = default 34 | log.file.dir = APP_ROOT "/storage/logs" 35 | ; log.syslog.host = 127.0.0.1 36 | ; log.syslog.port = 9999 37 | 38 | ; upload 39 | ; maxSize 3M 40 | upload.config.maxSize = 3145728 41 | upload.config.rootPath = APP_ROOT "/public/uploads" 42 | upload.config.savePath = "/documents/" 43 | 44 | ; 生产环境 45 | [product : common] 46 | application.showErrors = 0 47 | application.throwException = 0 48 | log.type = syslog 49 | log.host = 192.168.1.1 50 | log.port = 5141 51 | 52 | ; 测试环境 53 | [test : common] 54 | ;errors (see Bootstrap::initErrors) 55 | application.showErrors = 0 56 | application.throwException = 0 57 | 58 | ; 开发环境 59 | [develop : common] 60 | application.debug = 1 61 | ;errors (see Bootstrap::initErrors) 62 | application.showErrors = 1 63 | application.throwException = 1 64 | ;twig 65 | twig.debug = true 66 | 67 | ; queue 68 | queue.type = redis 69 | queue.name = default 70 | queue.redis = default 71 | 72 | ; cache 73 | cache.type = redis 74 | cache.redis = default 75 | 76 | ; Redis 77 | redis.default.host = 127.0.0.1 78 | redis.default.port = 6379 79 | 80 | ; database for Eloquent 81 | database.driver = mysql 82 | database.host = localhost 83 | database.database = testdb 84 | database.username = root 85 | database.password = 123456 86 | database.charset = utf8 87 | database.collation = utf8_general_ci 88 | database.prefix = '' 89 | 90 | ; 使用封装的PDO类 91 | ; 声明数据库类型 92 | database.type = mysql 93 | ; 声明数据库主机的别名,如果多台请使用,隔开 94 | database.hosts = testdb 95 | ; 默认的主机别名 96 | database.default.server = testdb 97 | ; testdb这个库的写库主机IP 98 | database.testdb.write.host = 127.0.0.1 99 | database.testdb.write.port = 3306 100 | database.testdb.write.database = testdb 101 | database.testdb.write.username = root 102 | database.testdb.write.password = 123456 103 | database.testdb.write.charset = utf8 104 | database.testdb.write.collation = collation 105 | database.testdb.write.prefix = tbl_ 106 | database.testdb.write.pconnect = 0 107 | 108 | ; testdb这个库的读库主机IP 109 | database.testdb.read.host = 127.0.0.1 110 | database.testdb.read.port = 3306 111 | database.testdb.read.database = testdb 112 | database.testdb.read.username = root 113 | database.testdb.read.password = 123456 114 | database.testdb.read.charset = utf8 115 | database.testdb.read.collation = collation 116 | database.testdb.read.prefix = tbl_ 117 | database.testdb.read.pconnect = 0 118 | -------------------------------------------------------------------------------- /conf/application.ini.example: -------------------------------------------------------------------------------- 1 | [common] 2 | application.directory = APP_PATH 3 | application.ext = "php" 4 | application.modules = Index,Web,Admin,Api,Console,Example 5 | application.dispatcher.defaultRoute = static 6 | application.dispatcher.throwException = true 7 | application.dispatcher.catchException = true 8 | ;application.baseUri = '' 9 | application.dispatcher.defaultModule = "index" 10 | application.dispatcher.defaultController = index 11 | application.dispatcher.defaultAction = index 12 | application.view.ext = "phtml" 13 | 14 | ; Layout 15 | application.library = APP_PATH "/library" 16 | application.layoutpath = APP_PATH "/views/" 17 | application.document = "layout.phtml" 18 | application.cache_config = 0 19 | ; twig engine 20 | ;application.view.engine = "twig" 21 | ;application.view.ext = "twig" 22 | ; blade engine 23 | ;application.view.engine = "blade" 24 | ;application.view.ext = "blade" 25 | 26 | ;twig 27 | twig.cache = STORAGE_PATH "/cache/view/twig" 28 | ;blade 29 | blade.cache = STORAGE_PATH "/cache/view/blade" 30 | 31 | ; Log 32 | log.level = debug 33 | log.channel = default 34 | log.file.dir = APP_ROOT "/storage/logs" 35 | ; log.syslog.host = 127.0.0.1 36 | ; log.syslog.port = 9999 37 | 38 | ; upload 39 | ; maxSize 3M 40 | upload.config.maxSize = 3145728 41 | upload.config.rootPath = APP_ROOT "/public/uploads" 42 | upload.config.savePath = "/documents/" 43 | 44 | ; 生产环境 45 | [product : common] 46 | application.showErrors = 0 47 | application.throwException = 0 48 | log.type = syslog 49 | log.host = 192.168.1.1 50 | log.port = 5141 51 | 52 | ; 测试环境 53 | [test : common] 54 | ;errors (see Bootstrap::initErrors) 55 | application.showErrors = 0 56 | application.throwException = 0 57 | 58 | ; 开发环境 59 | [develop : common] 60 | application.debug = 1 61 | ;errors (see Bootstrap::initErrors) 62 | application.showErrors = 1 63 | application.throwException = 1 64 | ;twig 65 | twig.debug = true 66 | 67 | ; queue 68 | queue.type = redis 69 | queue.name = default 70 | queue.redis = default 71 | 72 | ; cache 73 | cache.type = redis 74 | cache.redis = default 75 | 76 | ; Redis 77 | redis.default.host = 127.0.0.1 78 | redis.default.port = 6379 79 | 80 | ; database for Eloquent 81 | database.driver = mysql 82 | database.host = localhost 83 | database.database = testdb 84 | database.username = root 85 | database.password = 123456 86 | database.charset = utf8 87 | database.collation = utf8_general_ci 88 | database.prefix = '' 89 | 90 | ; 使用封装的PDO类 91 | ; 声明数据库类型 92 | database.type = mysql 93 | ; 声明数据库主机的别名,如果多台请使用,隔开 94 | database.hosts = testdb 95 | ; 默认的主机别名 96 | database.default.server = testdb 97 | ; testdb这个库的写库主机IP 98 | database.testdb.write.host = 127.0.0.1 99 | database.testdb.write.port = 3306 100 | database.testdb.write.database = testdb 101 | database.testdb.write.username = root 102 | database.testdb.write.password = 123456 103 | database.testdb.write.charset = utf8 104 | database.testdb.write.collation = collation 105 | database.testdb.write.prefix = tbl_ 106 | database.testdb.write.pconnect = 0 107 | 108 | ; testdb这个库的读库主机IP 109 | database.testdb.read.host = 127.0.0.1 110 | database.testdb.read.port = 3306 111 | database.testdb.read.database = testdb 112 | database.testdb.read.username = root 113 | database.testdb.read.password = 123456 114 | database.testdb.read.charset = utf8 115 | database.testdb.read.collation = collation 116 | database.testdb.read.prefix = tbl_ 117 | database.testdb.read.pconnect = 0 118 | -------------------------------------------------------------------------------- /app/modules/Example/controllers/Request.php: -------------------------------------------------------------------------------- 1 | disableView(); 17 | } 18 | 19 | public function httpAction() 20 | { 21 | var_dump($this->getRequest()->getParam('uid')); 22 | //var_dump(get_class_methods(Yaf\Request\Http::class)); 23 | } 24 | 25 | public function simpleAction() 26 | { 27 | var_dump(get_class_methods(Yaf\Request\Simple::class)); 28 | } 29 | 30 | public function serverInfoAction() 31 | { 32 | $request = $this->getRequest(); 33 | 34 | // output: Yaf_Request_Http 35 | echo "request class 所属实例: "; 36 | if ($request instanceof Request_Http) { 37 | echo "Yaf_Request_Http"; 38 | } elseif ($request instanceof Request_Simple) { 39 | echo "Yaf_Request_Simple"; 40 | } else { 41 | echo "yaf_Request_Abstract"; 42 | } 43 | echo "
"; 44 | 45 | var_dump($this->getRequest()->getServer() === $_SERVER); // true 46 | var_dump($this->getRequest()->getEnv() === $_ENV); // true 47 | var_dump($this->getRequest()->getLanguage()); // 48 | } 49 | 50 | /** 51 | * 获取请求参数 52 | */ 53 | public function paramsAction() 54 | { 55 | $request = $this->getRequest(); 56 | 57 | echo '
';
 58 | 
 59 |         // http://yaf-skel.com/example/request/params?user=test&uid=1
 60 | 
 61 |         var_dump($request->get('user'));        // test
 62 |         var_dump($request->getQuery());         // ['user' => test, 'uid' => 1]
 63 |         var_dump($request->getQuery('user'));   // test
 64 |         var_dump($request->getPost());          // empty
 65 |         var_dump($request->getPost('user'));    // null
 66 | 
 67 |         var_dump($request->getRequestUri());    // /example/request/params
 68 |         var_dump($request->getMethod());        // GET
 69 |         var_dump($request->getBaseUri());       // ''
 70 |         var_dump($request->getCookie());        // emtpy
 71 |         var_dump($request->getFiles());         // empty
 72 | 
 73 |         // http://yaf-skel.com/example/request/params/user/test/uid/1
 74 |         var_dump($request->getParams());         // ['user' => test, 'uid' => 1]
 75 |         var_dump($request->getParam('uid'));     // 1
 76 |         var_dump($request->getRequestUri());     // /example/request/params/user/test/uid/1
 77 | 
 78 |     }
 79 | 
 80 |     /**
 81 |      * 获取请求类型
 82 |      */
 83 |     public function methodAction()
 84 |     {
 85 |         var_dump($this->getRequest()->isCli());
 86 |         var_dump($this->getRequest()->isGet());
 87 |         var_dump($this->getRequest()->isPost());
 88 |         var_dump($this->getRequest()->isPut());
 89 |         var_dump($this->getRequest()->isXmlHttpRequest()); // 是否为ajax请求
 90 |         var_dump($this->getRequest()->isHead());
 91 |         var_dump($this->getRequest()->isOptions());
 92 |     }
 93 | 
 94 |     /**
 95 |      * 获取分发相关的方法
 96 |      */
 97 |     public function dispatchAction()
 98 |     {
 99 |         $this->getRequest()->setModuleName('Api');
100 | 
101 |         $this->getRequest()->setControllerName('Index');
102 | 
103 |         $this->getRequest()->setActionName('xxx');
104 | 
105 |         $this->getRequest()->setDispatched();
106 | 
107 |         $this->getRequest()->setRouted();
108 |     }
109 | 
110 | }
111 | 


--------------------------------------------------------------------------------
/app/modules/Web/Bootstrap.php:
--------------------------------------------------------------------------------
  1 | container = Registry::get('container');
 38 |     }
 39 | 
 40 |     public function _initAuth(Dispatcher $dispatcher)
 41 |     {
 42 |         $this->loadCtrlCls($dispatcher->getRequest());
 43 | 
 44 |         if ($this->isIgnoreUserAuth()) {
 45 |             return;
 46 |         }
 47 | 
 48 |         $this->setLoginedUser();
 49 |     }
 50 | 
 51 |     private function loadCtrlCls(Request_Abstract $request)
 52 |     {
 53 |         $this->ctrl = $request->getControllerName();
 54 |         $this->act = $request->getActionName();
 55 | 
 56 |         $ctrlFile = APP_PATH . '/modules/' . $request->getModuleName() . '/controllers/' . $this->ctrl . '.php';
 57 |         Loader::import($ctrlFile);
 58 | 
 59 |         $this->ctrlCls = $this->ctrl.'Controller';
 60 |     }
 61 | 
 62 |     private function isIgnoreUserAuth()
 63 |     {
 64 |         $ref = new ReflectionClass($this->ctrlCls);
 65 |         if (!$ref->hasProperty('ignoreUserAuth')) {
 66 |             return false;
 67 |         }
 68 | 
 69 |         $prop = $ref->getProperty('ignoreUserAuth');
 70 |         $prop->setAccessible(true);
 71 | 
 72 |         $propVal = $prop->getValue();
 73 |         if ($propVal === false) {
 74 |             return true;
 75 |         }
 76 | 
 77 |         if (is_array($propVal) && in_array($this->act, $propVal)) {
 78 |             return true;
 79 |         }
 80 | 
 81 |         return false;
 82 |     }
 83 | 
 84 |     private function setLoginedUser()
 85 |     {
 86 |         $uid = $this->container->get('srv.user')->getCurrentUid();
 87 |         if (!$uid) {
 88 |             // throw new \Exception('用户未登录', Code::AUTH_FAILED);
 89 |         }
 90 | 
 91 |         $userInfo = $this->container->get('srv.user')->getCurrentUserInfo();
 92 |         $this->container->get('sessionBag')->set('userInfo', $userInfo);
 93 |         $this->container->get('sessionBag')->set('uid', $uid);
 94 |     }
 95 | 
 96 |     /**
 97 |      * @param Dispatcher $dispatcher
 98 |      */
 99 |     public function _initView(Dispatcher $dispatcher)
100 |     {
101 |         $config = Registry::get('config');
102 |         $modulesName = $dispatcher->getRequest()->module;
103 |         $viewPath = APP_PATH . '/modules/' . $modulesName . '/views';
104 | 
105 |         // twig模板引擎
106 |         $viewEngine = $config['application']['view']['engine'];
107 |         if ($viewEngine == 'twig') {
108 |             $dispatcher->setView(new TwigAdapter($viewPath, $config['twig']));
109 |         }
110 |         // blade模板引擎
111 |         elseif ($viewEngine == 'blade') {
112 |             // finder实例
113 |             $finder = new FileViewFinder(new Filesystem(), [$viewPath]);
114 |             // 视图工厂
115 |             $viewFactory = new BladeAdapter($this->registerEngineResolver(), $finder, new BladeDispatcher());
116 |             // 设置模板引擎
117 |             $dispatcher->setView($viewFactory);
118 |         }
119 |     }
120 | 
121 |     /**
122 |      * 注册模板引擎
123 |      * @return EngineResolver
124 |      */
125 |     protected function registerEngineResolver()
126 |     {
127 |         $resolver = new EngineResolver;
128 |         foreach (['php', 'blade'] as $engine) {
129 |             $this->{'register'.ucfirst($engine).'Engine'}($resolver);
130 |         }
131 |         return $resolver;
132 |     }
133 |     /**
134 |      * 注册PHP模板引擎
135 |      *
136 |      * @param  \Illuminate\View\Engines\EngineResolver  $resolver
137 |      * @return void
138 |      */
139 |     protected function registerPhpEngine($resolver)
140 |     {
141 |         $resolver->register('php', function () {
142 |             return new PhpEngine;
143 |         });
144 |     }
145 |     /**
146 |      * 注册blade模板引擎
147 |      *
148 |      * @param  \Illuminate\View\Engines\EngineResolver  $resolver
149 |      * @return void
150 |      */
151 |     protected function registerBladeEngine($resolver)
152 |     {
153 |         $cache = Registry::get('config')['blade']['cache'];  //获取编译路径
154 |         $bladeCompiler = new BladeCompiler(new Filesystem(), $cache); //实例blade模板编译类
155 |         $resolver->register('blade', function () use ($bladeCompiler) {
156 |             return new CompilerEngine($bladeCompiler);
157 |         });
158 |     }
159 | }
160 | 


--------------------------------------------------------------------------------
/app/modules/Console/controllers/Daemon.php:
--------------------------------------------------------------------------------
  1 | pidFile = '/var/run/yaf-'.basename(get_class($class), '.php').'.pid';
 66 |         //$this->config = parse_ini_file('sender.ini', true);
 67 |         $this->class = $class;
 68 |         $this->action = $action;
 69 | 
 70 |         $this->signal();
 71 |     }
 72 | 
 73 |     public function signal()
 74 |     {
 75 |         pcntl_signal(SIGHUP,  function($signo) /*use ()*/{
 76 |             //echo "\n This signal is called. [$signo] \n";
 77 |             printf("The process has been reload.\n");
 78 |             Signal::set($signo);
 79 |         });
 80 | 
 81 |     }
 82 | 
 83 |     private function daemon()
 84 |     {
 85 |         if (file_exists($this->pidFile)) {
 86 |             printf("The file $this->pidFile exists.\n");
 87 |             exit();
 88 |         }
 89 | 
 90 |         $pid = pcntl_fork();
 91 |         if ($pid == -1) {
 92 |             die('could not fork');
 93 |         } else if ($pid) {
 94 |             // we are the parent
 95 |             //pcntl_wait($status); //Protect against Zombie children
 96 |             exit($pid);
 97 |         } else {
 98 |             file_put_contents($this->pidFile, getmypid());
 99 |             posix_setuid(self::uid);
100 |             posix_setgid(self::gid);
101 |             return(getmypid());
102 |         }
103 |     }
104 | 
105 |     private function run()
106 |     {
107 |         while(true){
108 |             printf("The process begin.\n");
109 |             $action = $this->action;
110 |             $this->class->$action();
111 |             printf("The process end.\n");
112 |         }
113 |     }
114 | 
115 |     private function foreground()
116 |     {
117 |         $this->run();
118 |     }
119 | 
120 |     private function start()
121 |     {
122 |         $pid = $this->daemon();
123 |         printf("The process pid is : \n", $pid);
124 | 
125 |         for(;;){
126 |             $this->run();
127 |             sleep(self::sleep);
128 |         }
129 |     }
130 | 
131 |     private function stop()
132 |     {
133 |         if (file_exists($this->pidFile)) {
134 |             $pid = file_get_contents($this->pidFile);
135 |             posix_kill($pid, 9);
136 |             unlink($this->pidFile);
137 |         }
138 |     }
139 | 
140 |     private function reload()
141 |     {
142 |         if (file_exists($this->pidFile)) {
143 |             $pid = file_get_contents($this->pidFile);
144 |             //posix_kill(posix_getpid(), SIGHUP);
145 |             posix_kill($pid, SIGHUP);
146 |         }
147 |     }
148 | 
149 |     private function status()
150 |     {
151 |         if (file_exists($this->pidFile)) {
152 |             $pid = file_get_contents($this->pidFile);
153 |             system(sprintf("ps ax | grep %s | grep -v grep", $pid));
154 |         }
155 |     }
156 | 
157 |     private function help($proc){
158 |         printf("%s start | stop | restart | status | foreground | help \n", $proc);
159 |     }
160 | 
161 |     public function main($argv)
162 |     {
163 |         if(count($argv) < 2){
164 |             $this->help($argv[0]);
165 |             printf("please input help parameter\n");
166 |             exit();
167 |         }
168 | 
169 |         if($argv[1] === 'stop'){
170 |             $this->stop();
171 |         }else if($argv[1] === 'start'){
172 |             $this->start();
173 |         }else if($argv[1] === 'restart'){
174 |             $this->stop();
175 |             $this->start();
176 |         }else if($argv[1] === 'status'){
177 |             $this->status();
178 |         }else if($argv[1] === 'foreground'){
179 |             $this->foreground();
180 |         }else if($argv[1] === 'reload'){
181 |             $this->reload();
182 |         }else{
183 |             $this->help($argv[0]);
184 |         }
185 |     }
186 | }
187 | 
188 | $daemon = new Daemon(new Test());
189 | $daemon->main($argv);
190 | ?>


--------------------------------------------------------------------------------
/app/Bootstrap.php:
--------------------------------------------------------------------------------
  1 | config = Application::app()->getConfig()->toArray();
 34 | 
 35 |         if (empty($_SERVER['HTTP_X_REQUEST_ID'])) {
 36 |             $_SERVER['HTTP_X_REQUEST_ID'] = uniqid();
 37 |         }
 38 | 
 39 |         Registry::set('config', $this->config);
 40 |     }
 41 | 
 42 |     /**
 43 |      * 初始化Loader
 44 |      */
 45 |     public function _initLoader()
 46 |     {
 47 |         $loader = Loader::getInstance();
 48 | 
 49 |         $autoload = APP_ROOT . '/vendor/autoload.php';
 50 |         if (file_exists($autoload)) {
 51 |             $loader->import($autoload);
 52 |         }
 53 |     }
 54 | 
 55 |     /**
 56 |      * @param Dispatcher $dispatcher
 57 |      */
 58 |     public function _initPlugin(Dispatcher $dispatcher)
 59 |     {
 60 |         $dispatcher->registerPlugin(new ModuleBootstrapPlugin());
 61 |     }
 62 | 
 63 |     /**
 64 |      * 注册路由
 65 |      *
 66 |      * @param Dispatcher $dispatcher
 67 |      */
 68 |     public function _initRoute(Dispatcher $dispatcher)
 69 |     {
 70 |         //在这里注册自己的路由协议,默认使用简单路由
 71 |         // 增加一些路由规则
 72 |         // 默认是 Yaf_Route_Static
 73 | 
 74 |         // 开启simple路由协议
 75 |         //$router = $dispatcher->getRouter();
 76 |         //$route = new Yaf\Route\Simple("m","c","a");
 77 |         //$router->addRoute('name', $route);
 78 | 
 79 |         // 开启supervar路由协议
 80 |         //$router = $dispatcher->getRouter();
 81 |         //$route = new Yaf\Route\Supervar('r');
 82 |         //$router->addRoute('name', $route);
 83 | 
 84 |         // 开启rewrite路由协议
 85 |         //$router = $dispatcher->getRouter();
 86 |         //$route = new Yaf\Route\Rewrite(
 87 |         //    '/product/:name',
 88 |         //    [
 89 |         //        'module' => 'example',
 90 |         //        'controller' => 'route',
 91 |         //        'action' => 'rewrite'
 92 |         //    ]
 93 |         //);
 94 |         //$router->addRoute('name', $route);
 95 | 
 96 |         // 开启regex路由协议
 97 |         //$router = $dispatcher->getRouter();
 98 |         //$route = new Yaf\Route\Regex(
 99 |         //    '/product\/([\d]+)\/([\d]+)/',
100 |         //    [
101 |         //        'module' => 'example',
102 |         //        'controller' => 'route',
103 |         //        'action' => 'regex'
104 |         //    ],
105 |         //    [
106 |         //        1 => 'id',
107 |         //        2 => 'tag_id'
108 |         //    ]
109 |         //);
110 |         //$router->addRoute('name', $route);
111 | 
112 |         // 开启map路由协议
113 |         //$router = $dispatcher->getRouter();
114 |         //$route = new Yaf\Route\Map(true, '#');
115 |         //$router->addRoute('product', $route);
116 | 
117 |         //$config = require(APP_ROOT . '/conf/routes.php');
118 |         //$router = $dispatcher->getRouter();
119 |         //$router->addConfig($config);
120 |     }
121 | 
122 |     /**
123 |      * 初始化依赖注入services
124 |      */
125 |     public function _initServices()
126 |     {
127 |         $services = [];
128 |         if (file_exists($basicService = CONFIG_PATH . '/providers.php') && is_readable($basicService)) {
129 |             $services = require $basicService;
130 |         }
131 | 
132 |         $env = Application::app()->environ();
133 |         if (file_exists($envService = CONFIG_PATH . '/' . $env . '/providers.php') && is_readable($envService)) {
134 |             $services = array_merge($services, require $envService);
135 |         }
136 | 
137 |         Registry::set('container', new ServiceContainer($services));
138 |     }
139 | 
140 |     /**
141 |      * 初始化全局事件监听
142 |      */
143 |     public function _initListener()
144 |     {
145 |         $listeners = [];
146 |         if (file_exists($basicListener = CONFIG_PATH . '/listener.php')) {
147 |             $listeners = require $basicListener;
148 |         }
149 | 
150 |         $env = Application::app()->environ();
151 |         if (file_exists($envListener = CONFIG_PATH . '/' . $env . '/listener.php') && is_readable($envListener)) {
152 |             $listeners = array_merge($listeners, require $envListener);
153 |         }
154 | 
155 |         /** @var \PHPCasts\Yaf\Events\Manager $em */
156 |         $em = Registry::get('container')->get('eventsManager');
157 |         foreach ($listeners as $event => $handler) {
158 |             if (is_array($handler)) {
159 |                 foreach ($handler as $h) {
160 |                     $em->attach($event, $h);
161 |                 }
162 |             } else {
163 |                 $em->attach($event, $handler);
164 |             }
165 |         }
166 |     }
167 | 
168 |     /**
169 |      * @param Dispatcher $dispatcher
170 |      */
171 |     public function _initView(Dispatcher $dispatcher)
172 |     {
173 |         // 不自动渲染视图
174 |         $dispatcher->autoRender(false);
175 |     }
176 | 
177 |     /**
178 |      * 初始化 Eloquent ORM
179 |      *
180 |      * @param Dispatcher|\Yaf\Dispatcher $dispatcher
181 |      */
182 |     public function _initDatabase(Dispatcher $dispatcher)
183 |     {
184 |         $capsule = new Capsule();
185 |         $db = $this->config['database'];
186 |         $capsule->addConnection($db);
187 |         $capsule->setEventDispatcher(new LDispatcher(new LContainer));
188 |         $capsule->setAsGlobal();
189 |         $capsule->bootEloquent();
190 | 
191 |         class_alias('\Illuminate\Database\Capsule\Manager', 'DB');
192 |     }
193 | }
194 | 


--------------------------------------------------------------------------------
/composer.lock:
--------------------------------------------------------------------------------
   1 | {
   2 |     "_readme": [
   3 |         "This file locks the dependencies of your project to a known state",
   4 |         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
   5 |         "This file is @generated automatically"
   6 |     ],
   7 |     "content-hash": "6ee3f20c64dfd22967a0da2b761990fa",
   8 |     "packages": [
   9 |         {
  10 |             "name": "doctrine/inflector",
  11 |             "version": "1.2.x-dev",
  12 |             "source": {
  13 |                 "type": "git",
  14 |                 "url": "https://github.com/doctrine/inflector.git",
  15 |                 "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462"
  16 |             },
  17 |             "dist": {
  18 |                 "type": "zip",
  19 |                 "url": "https://api.github.com/repos/doctrine/inflector/zipball/e11d84c6e018beedd929cff5220969a3c6d1d462",
  20 |                 "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462",
  21 |                 "shasum": ""
  22 |             },
  23 |             "require": {
  24 |                 "php": "^7.0"
  25 |             },
  26 |             "require-dev": {
  27 |                 "phpunit/phpunit": "^6.2"
  28 |             },
  29 |             "type": "library",
  30 |             "extra": {
  31 |                 "branch-alias": {
  32 |                     "dev-master": "1.2.x-dev"
  33 |                 }
  34 |             },
  35 |             "autoload": {
  36 |                 "psr-4": {
  37 |                     "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector"
  38 |                 }
  39 |             },
  40 |             "notification-url": "https://packagist.org/downloads/",
  41 |             "license": [
  42 |                 "MIT"
  43 |             ],
  44 |             "authors": [
  45 |                 {
  46 |                     "name": "Roman Borschel",
  47 |                     "email": "roman@code-factory.org"
  48 |                 },
  49 |                 {
  50 |                     "name": "Benjamin Eberlei",
  51 |                     "email": "kontakt@beberlei.de"
  52 |                 },
  53 |                 {
  54 |                     "name": "Guilherme Blanco",
  55 |                     "email": "guilhermeblanco@gmail.com"
  56 |                 },
  57 |                 {
  58 |                     "name": "Jonathan Wage",
  59 |                     "email": "jonwage@gmail.com"
  60 |                 },
  61 |                 {
  62 |                     "name": "Johannes Schmitt",
  63 |                     "email": "schmittjoh@gmail.com"
  64 |                 }
  65 |             ],
  66 |             "description": "Common String Manipulations with regard to casing and singular/plural rules.",
  67 |             "homepage": "http://www.doctrine-project.org",
  68 |             "keywords": [
  69 |                 "inflection",
  70 |                 "pluralize",
  71 |                 "singularize",
  72 |                 "string"
  73 |             ],
  74 |             "time": "2017-07-22T12:18:28+00:00"
  75 |         },
  76 |         {
  77 |             "name": "guzzlehttp/guzzle",
  78 |             "version": "6.3.0",
  79 |             "source": {
  80 |                 "type": "git",
  81 |                 "url": "https://github.com/guzzle/guzzle.git",
  82 |                 "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699"
  83 |             },
  84 |             "dist": {
  85 |                 "type": "zip",
  86 |                 "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699",
  87 |                 "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699",
  88 |                 "shasum": ""
  89 |             },
  90 |             "require": {
  91 |                 "guzzlehttp/promises": "^1.0",
  92 |                 "guzzlehttp/psr7": "^1.4",
  93 |                 "php": ">=5.5"
  94 |             },
  95 |             "require-dev": {
  96 |                 "ext-curl": "*",
  97 |                 "phpunit/phpunit": "^4.0 || ^5.0",
  98 |                 "psr/log": "^1.0"
  99 |             },
 100 |             "suggest": {
 101 |                 "psr/log": "Required for using the Log middleware"
 102 |             },
 103 |             "type": "library",
 104 |             "extra": {
 105 |                 "branch-alias": {
 106 |                     "dev-master": "6.2-dev"
 107 |                 }
 108 |             },
 109 |             "autoload": {
 110 |                 "files": [
 111 |                     "src/functions_include.php"
 112 |                 ],
 113 |                 "psr-4": {
 114 |                     "GuzzleHttp\\": "src/"
 115 |                 }
 116 |             },
 117 |             "notification-url": "https://packagist.org/downloads/",
 118 |             "license": [
 119 |                 "MIT"
 120 |             ],
 121 |             "authors": [
 122 |                 {
 123 |                     "name": "Michael Dowling",
 124 |                     "email": "mtdowling@gmail.com",
 125 |                     "homepage": "https://github.com/mtdowling"
 126 |                 }
 127 |             ],
 128 |             "description": "Guzzle is a PHP HTTP client library",
 129 |             "homepage": "http://guzzlephp.org/",
 130 |             "keywords": [
 131 |                 "client",
 132 |                 "curl",
 133 |                 "framework",
 134 |                 "http",
 135 |                 "http client",
 136 |                 "rest",
 137 |                 "web service"
 138 |             ],
 139 |             "time": "2017-06-22T18:50:49+00:00"
 140 |         },
 141 |         {
 142 |             "name": "guzzlehttp/promises",
 143 |             "version": "dev-master",
 144 |             "source": {
 145 |                 "type": "git",
 146 |                 "url": "https://github.com/guzzle/promises.git",
 147 |                 "reference": "09e549f5534380c68761260a71f847644d8f65aa"
 148 |             },
 149 |             "dist": {
 150 |                 "type": "zip",
 151 |                 "url": "https://api.github.com/repos/guzzle/promises/zipball/09e549f5534380c68761260a71f847644d8f65aa",
 152 |                 "reference": "09e549f5534380c68761260a71f847644d8f65aa",
 153 |                 "shasum": ""
 154 |             },
 155 |             "require": {
 156 |                 "php": ">=5.5.0"
 157 |             },
 158 |             "require-dev": {
 159 |                 "phpunit/phpunit": "^4.0"
 160 |             },
 161 |             "type": "library",
 162 |             "extra": {
 163 |                 "branch-alias": {
 164 |                     "dev-master": "1.4-dev"
 165 |                 }
 166 |             },
 167 |             "autoload": {
 168 |                 "psr-4": {
 169 |                     "GuzzleHttp\\Promise\\": "src/"
 170 |                 },
 171 |                 "files": [
 172 |                     "src/functions_include.php"
 173 |                 ]
 174 |             },
 175 |             "notification-url": "https://packagist.org/downloads/",
 176 |             "license": [
 177 |                 "MIT"
 178 |             ],
 179 |             "authors": [
 180 |                 {
 181 |                     "name": "Michael Dowling",
 182 |                     "email": "mtdowling@gmail.com",
 183 |                     "homepage": "https://github.com/mtdowling"
 184 |                 }
 185 |             ],
 186 |             "description": "Guzzle promises library",
 187 |             "keywords": [
 188 |                 "promise"
 189 |             ],
 190 |             "time": "2017-05-20T23:14:18+00:00"
 191 |         },
 192 |         {
 193 |             "name": "guzzlehttp/psr7",
 194 |             "version": "dev-master",
 195 |             "source": {
 196 |                 "type": "git",
 197 |                 "url": "https://github.com/guzzle/psr7.git",
 198 |                 "reference": "811b676fbab9c99e359885032e5ebc70e442f5b8"
 199 |             },
 200 |             "dist": {
 201 |                 "type": "zip",
 202 |                 "url": "https://api.github.com/repos/guzzle/psr7/zipball/811b676fbab9c99e359885032e5ebc70e442f5b8",
 203 |                 "reference": "811b676fbab9c99e359885032e5ebc70e442f5b8",
 204 |                 "shasum": ""
 205 |             },
 206 |             "require": {
 207 |                 "php": ">=5.4.0",
 208 |                 "psr/http-message": "~1.0"
 209 |             },
 210 |             "provide": {
 211 |                 "psr/http-message-implementation": "1.0"
 212 |             },
 213 |             "require-dev": {
 214 |                 "phpunit/phpunit": "~4.0"
 215 |             },
 216 |             "type": "library",
 217 |             "extra": {
 218 |                 "branch-alias": {
 219 |                     "dev-master": "1.4-dev"
 220 |                 }
 221 |             },
 222 |             "autoload": {
 223 |                 "psr-4": {
 224 |                     "GuzzleHttp\\Psr7\\": "src/"
 225 |                 },
 226 |                 "files": [
 227 |                     "src/functions_include.php"
 228 |                 ]
 229 |             },
 230 |             "notification-url": "https://packagist.org/downloads/",
 231 |             "license": [
 232 |                 "MIT"
 233 |             ],
 234 |             "authors": [
 235 |                 {
 236 |                     "name": "Michael Dowling",
 237 |                     "email": "mtdowling@gmail.com",
 238 |                     "homepage": "https://github.com/mtdowling"
 239 |                 },
 240 |                 {
 241 |                     "name": "Tobias Schultze",
 242 |                     "homepage": "https://github.com/Tobion"
 243 |                 }
 244 |             ],
 245 |             "description": "PSR-7 message implementation that also provides common utility methods",
 246 |             "keywords": [
 247 |                 "http",
 248 |                 "message",
 249 |                 "request",
 250 |                 "response",
 251 |                 "stream",
 252 |                 "uri",
 253 |                 "url"
 254 |             ],
 255 |             "time": "2017-07-17T09:11:21+00:00"
 256 |         },
 257 |         {
 258 |             "name": "illuminate/container",
 259 |             "version": "dev-master",
 260 |             "source": {
 261 |                 "type": "git",
 262 |                 "url": "https://github.com/illuminate/container.git",
 263 |                 "reference": "6c815b0fc1d593bb06867e9c43208c45fe0d476e"
 264 |             },
 265 |             "dist": {
 266 |                 "type": "zip",
 267 |                 "url": "https://api.github.com/repos/illuminate/container/zipball/6c815b0fc1d593bb06867e9c43208c45fe0d476e",
 268 |                 "reference": "6c815b0fc1d593bb06867e9c43208c45fe0d476e",
 269 |                 "shasum": ""
 270 |             },
 271 |             "require": {
 272 |                 "illuminate/contracts": "5.6.*",
 273 |                 "php": ">=7.0",
 274 |                 "psr/container": "~1.0"
 275 |             },
 276 |             "type": "library",
 277 |             "extra": {
 278 |                 "branch-alias": {
 279 |                     "dev-master": "5.6-dev"
 280 |                 }
 281 |             },
 282 |             "autoload": {
 283 |                 "psr-4": {
 284 |                     "Illuminate\\Container\\": ""
 285 |                 }
 286 |             },
 287 |             "notification-url": "https://packagist.org/downloads/",
 288 |             "license": [
 289 |                 "MIT"
 290 |             ],
 291 |             "authors": [
 292 |                 {
 293 |                     "name": "Taylor Otwell",
 294 |                     "email": "taylor@laravel.com"
 295 |                 }
 296 |             ],
 297 |             "description": "The Illuminate Container package.",
 298 |             "homepage": "https://laravel.com",
 299 |             "time": "2017-09-04T14:02:58+00:00"
 300 |         },
 301 |         {
 302 |             "name": "illuminate/contracts",
 303 |             "version": "dev-master",
 304 |             "source": {
 305 |                 "type": "git",
 306 |                 "url": "https://github.com/illuminate/contracts.git",
 307 |                 "reference": "5f726e42f9945b135a1b29210c244e4598bde300"
 308 |             },
 309 |             "dist": {
 310 |                 "type": "zip",
 311 |                 "url": "https://api.github.com/repos/illuminate/contracts/zipball/5f726e42f9945b135a1b29210c244e4598bde300",
 312 |                 "reference": "5f726e42f9945b135a1b29210c244e4598bde300",
 313 |                 "shasum": ""
 314 |             },
 315 |             "require": {
 316 |                 "php": ">=7.0",
 317 |                 "psr/container": "~1.0",
 318 |                 "psr/simple-cache": "~1.0"
 319 |             },
 320 |             "type": "library",
 321 |             "extra": {
 322 |                 "branch-alias": {
 323 |                     "dev-master": "5.6-dev"
 324 |                 }
 325 |             },
 326 |             "autoload": {
 327 |                 "psr-4": {
 328 |                     "Illuminate\\Contracts\\": ""
 329 |                 }
 330 |             },
 331 |             "notification-url": "https://packagist.org/downloads/",
 332 |             "license": [
 333 |                 "MIT"
 334 |             ],
 335 |             "authors": [
 336 |                 {
 337 |                     "name": "Taylor Otwell",
 338 |                     "email": "taylor@laravel.com"
 339 |                 }
 340 |             ],
 341 |             "description": "The Illuminate Contracts package.",
 342 |             "homepage": "https://laravel.com",
 343 |             "time": "2017-08-30T21:07:22+00:00"
 344 |         },
 345 |         {
 346 |             "name": "illuminate/database",
 347 |             "version": "dev-master",
 348 |             "source": {
 349 |                 "type": "git",
 350 |                 "url": "https://github.com/illuminate/database.git",
 351 |                 "reference": "ae2ebedfa14cf6861a0fa8b24c24a52e00ef1849"
 352 |             },
 353 |             "dist": {
 354 |                 "type": "zip",
 355 |                 "url": "https://api.github.com/repos/illuminate/database/zipball/ae2ebedfa14cf6861a0fa8b24c24a52e00ef1849",
 356 |                 "reference": "ae2ebedfa14cf6861a0fa8b24c24a52e00ef1849",
 357 |                 "shasum": ""
 358 |             },
 359 |             "require": {
 360 |                 "illuminate/container": "5.6.*",
 361 |                 "illuminate/contracts": "5.6.*",
 362 |                 "illuminate/support": "5.6.*",
 363 |                 "php": ">=7.0"
 364 |             },
 365 |             "suggest": {
 366 |                 "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.5).",
 367 |                 "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).",
 368 |                 "illuminate/console": "Required to use the database commands (5.6.*).",
 369 |                 "illuminate/events": "Required to use the observers with Eloquent (5.6.*).",
 370 |                 "illuminate/filesystem": "Required to use the migrations (5.6.*).",
 371 |                 "illuminate/pagination": "Required to paginate the result set (5.6.*)."
 372 |             },
 373 |             "type": "library",
 374 |             "extra": {
 375 |                 "branch-alias": {
 376 |                     "dev-master": "5.6-dev"
 377 |                 }
 378 |             },
 379 |             "autoload": {
 380 |                 "psr-4": {
 381 |                     "Illuminate\\Database\\": ""
 382 |                 }
 383 |             },
 384 |             "notification-url": "https://packagist.org/downloads/",
 385 |             "license": [
 386 |                 "MIT"
 387 |             ],
 388 |             "authors": [
 389 |                 {
 390 |                     "name": "Taylor Otwell",
 391 |                     "email": "taylor@laravel.com"
 392 |                 }
 393 |             ],
 394 |             "description": "The Illuminate Database package.",
 395 |             "homepage": "https://laravel.com",
 396 |             "keywords": [
 397 |                 "database",
 398 |                 "laravel",
 399 |                 "orm",
 400 |                 "sql"
 401 |             ],
 402 |             "time": "2017-09-01T06:35:20+00:00"
 403 |         },
 404 |         {
 405 |             "name": "illuminate/events",
 406 |             "version": "dev-master",
 407 |             "source": {
 408 |                 "type": "git",
 409 |                 "url": "https://github.com/illuminate/events.git",
 410 |                 "reference": "d4e4ee8fe67ff8d37a304626c8ea3c793228eeaf"
 411 |             },
 412 |             "dist": {
 413 |                 "type": "zip",
 414 |                 "url": "https://api.github.com/repos/illuminate/events/zipball/d4e4ee8fe67ff8d37a304626c8ea3c793228eeaf",
 415 |                 "reference": "d4e4ee8fe67ff8d37a304626c8ea3c793228eeaf",
 416 |                 "shasum": ""
 417 |             },
 418 |             "require": {
 419 |                 "illuminate/container": "5.6.*",
 420 |                 "illuminate/contracts": "5.6.*",
 421 |                 "illuminate/support": "5.6.*",
 422 |                 "php": ">=7.0"
 423 |             },
 424 |             "type": "library",
 425 |             "extra": {
 426 |                 "branch-alias": {
 427 |                     "dev-master": "5.6-dev"
 428 |                 }
 429 |             },
 430 |             "autoload": {
 431 |                 "psr-4": {
 432 |                     "Illuminate\\Events\\": ""
 433 |                 }
 434 |             },
 435 |             "notification-url": "https://packagist.org/downloads/",
 436 |             "license": [
 437 |                 "MIT"
 438 |             ],
 439 |             "authors": [
 440 |                 {
 441 |                     "name": "Taylor Otwell",
 442 |                     "email": "taylor@laravel.com"
 443 |                 }
 444 |             ],
 445 |             "description": "The Illuminate Events package.",
 446 |             "homepage": "https://laravel.com",
 447 |             "time": "2017-08-30T21:07:22+00:00"
 448 |         },
 449 |         {
 450 |             "name": "illuminate/filesystem",
 451 |             "version": "dev-master",
 452 |             "source": {
 453 |                 "type": "git",
 454 |                 "url": "https://github.com/illuminate/filesystem.git",
 455 |                 "reference": "346d406bd81d10c1ed5c281711f68e681d5e4592"
 456 |             },
 457 |             "dist": {
 458 |                 "type": "zip",
 459 |                 "url": "https://api.github.com/repos/illuminate/filesystem/zipball/346d406bd81d10c1ed5c281711f68e681d5e4592",
 460 |                 "reference": "346d406bd81d10c1ed5c281711f68e681d5e4592",
 461 |                 "shasum": ""
 462 |             },
 463 |             "require": {
 464 |                 "illuminate/contracts": "5.6.*",
 465 |                 "illuminate/support": "5.6.*",
 466 |                 "php": ">=7.0",
 467 |                 "symfony/finder": "~3.3"
 468 |             },
 469 |             "suggest": {
 470 |                 "league/flysystem": "Required to use the Flysystem local and FTP drivers (~1.0).",
 471 |                 "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).",
 472 |                 "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0)."
 473 |             },
 474 |             "type": "library",
 475 |             "extra": {
 476 |                 "branch-alias": {
 477 |                     "dev-master": "5.6-dev"
 478 |                 }
 479 |             },
 480 |             "autoload": {
 481 |                 "psr-4": {
 482 |                     "Illuminate\\Filesystem\\": ""
 483 |                 }
 484 |             },
 485 |             "notification-url": "https://packagist.org/downloads/",
 486 |             "license": [
 487 |                 "MIT"
 488 |             ],
 489 |             "authors": [
 490 |                 {
 491 |                     "name": "Taylor Otwell",
 492 |                     "email": "taylor@laravel.com"
 493 |                 }
 494 |             ],
 495 |             "description": "The Illuminate Filesystem package.",
 496 |             "homepage": "https://laravel.com",
 497 |             "time": "2017-10-22T00:47:54+00:00"
 498 |         },
 499 |         {
 500 |             "name": "illuminate/support",
 501 |             "version": "dev-master",
 502 |             "source": {
 503 |                 "type": "git",
 504 |                 "url": "https://github.com/illuminate/support.git",
 505 |                 "reference": "30c977bac563e87012e4223a6a73a3a608187a30"
 506 |             },
 507 |             "dist": {
 508 |                 "type": "zip",
 509 |                 "url": "https://api.github.com/repos/illuminate/support/zipball/30c977bac563e87012e4223a6a73a3a608187a30",
 510 |                 "reference": "30c977bac563e87012e4223a6a73a3a608187a30",
 511 |                 "shasum": ""
 512 |             },
 513 |             "require": {
 514 |                 "doctrine/inflector": "~1.1",
 515 |                 "ext-mbstring": "*",
 516 |                 "illuminate/contracts": "5.6.*",
 517 |                 "nesbot/carbon": "^1.20",
 518 |                 "php": ">=7.0"
 519 |             },
 520 |             "replace": {
 521 |                 "tightenco/collect": "self.version"
 522 |             },
 523 |             "suggest": {
 524 |                 "illuminate/filesystem": "Required to use the composer class (5.2.*).",
 525 |                 "symfony/process": "Required to use the composer class (~3.3).",
 526 |                 "symfony/var-dumper": "Required to use the dd function (~3.3)."
 527 |             },
 528 |             "type": "library",
 529 |             "extra": {
 530 |                 "branch-alias": {
 531 |                     "dev-master": "5.6-dev"
 532 |                 }
 533 |             },
 534 |             "autoload": {
 535 |                 "psr-4": {
 536 |                     "Illuminate\\Support\\": ""
 537 |                 },
 538 |                 "files": [
 539 |                     "helpers.php"
 540 |                 ]
 541 |             },
 542 |             "notification-url": "https://packagist.org/downloads/",
 543 |             "license": [
 544 |                 "MIT"
 545 |             ],
 546 |             "authors": [
 547 |                 {
 548 |                     "name": "Taylor Otwell",
 549 |                     "email": "taylor@laravel.com"
 550 |                 }
 551 |             ],
 552 |             "description": "The Illuminate Support package.",
 553 |             "homepage": "https://laravel.com",
 554 |             "time": "2017-09-01T06:35:20+00:00"
 555 |         },
 556 |         {
 557 |             "name": "illuminate/view",
 558 |             "version": "dev-master",
 559 |             "source": {
 560 |                 "type": "git",
 561 |                 "url": "https://github.com/illuminate/view.git",
 562 |                 "reference": "583ba230341f27e13f7874d8bfba7c7aa3a5bbf3"
 563 |             },
 564 |             "dist": {
 565 |                 "type": "zip",
 566 |                 "url": "https://api.github.com/repos/illuminate/view/zipball/583ba230341f27e13f7874d8bfba7c7aa3a5bbf3",
 567 |                 "reference": "583ba230341f27e13f7874d8bfba7c7aa3a5bbf3",
 568 |                 "shasum": ""
 569 |             },
 570 |             "require": {
 571 |                 "illuminate/container": "5.6.*",
 572 |                 "illuminate/contracts": "5.6.*",
 573 |                 "illuminate/events": "5.6.*",
 574 |                 "illuminate/filesystem": "5.6.*",
 575 |                 "illuminate/support": "5.6.*",
 576 |                 "php": ">=7.0",
 577 |                 "symfony/debug": "~3.3"
 578 |             },
 579 |             "type": "library",
 580 |             "extra": {
 581 |                 "branch-alias": {
 582 |                     "dev-master": "5.6-dev"
 583 |                 }
 584 |             },
 585 |             "autoload": {
 586 |                 "psr-4": {
 587 |                     "Illuminate\\View\\": ""
 588 |                 }
 589 |             },
 590 |             "notification-url": "https://packagist.org/downloads/",
 591 |             "license": [
 592 |                 "MIT"
 593 |             ],
 594 |             "authors": [
 595 |                 {
 596 |                     "name": "Taylor Otwell",
 597 |                     "email": "taylor@laravel.com"
 598 |                 }
 599 |             ],
 600 |             "description": "The Illuminate View package.",
 601 |             "homepage": "https://laravel.com",
 602 |             "time": "2017-10-22T00:47:54+00:00"
 603 |         },
 604 |         {
 605 |             "name": "monolog/monolog",
 606 |             "version": "1.x-dev",
 607 |             "source": {
 608 |                 "type": "git",
 609 |                 "url": "https://github.com/Seldaek/monolog.git",
 610 |                 "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4"
 611 |             },
 612 |             "dist": {
 613 |                 "type": "zip",
 614 |                 "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
 615 |                 "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
 616 |                 "shasum": ""
 617 |             },
 618 |             "require": {
 619 |                 "php": ">=5.3.0",
 620 |                 "psr/log": "~1.0"
 621 |             },
 622 |             "provide": {
 623 |                 "psr/log-implementation": "1.0.0"
 624 |             },
 625 |             "require-dev": {
 626 |                 "aws/aws-sdk-php": "^2.4.9 || ^3.0",
 627 |                 "doctrine/couchdb": "~1.0@dev",
 628 |                 "graylog2/gelf-php": "~1.0",
 629 |                 "jakub-onderka/php-parallel-lint": "0.9",
 630 |                 "php-amqplib/php-amqplib": "~2.4",
 631 |                 "php-console/php-console": "^3.1.3",
 632 |                 "phpunit/phpunit": "~4.5",
 633 |                 "phpunit/phpunit-mock-objects": "2.3.0",
 634 |                 "ruflin/elastica": ">=0.90 <3.0",
 635 |                 "sentry/sentry": "^0.13",
 636 |                 "swiftmailer/swiftmailer": "^5.3|^6.0"
 637 |             },
 638 |             "suggest": {
 639 |                 "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
 640 |                 "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
 641 |                 "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
 642 |                 "ext-mongo": "Allow sending log messages to a MongoDB server",
 643 |                 "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
 644 |                 "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver",
 645 |                 "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
 646 |                 "php-console/php-console": "Allow sending log messages to Google Chrome",
 647 |                 "rollbar/rollbar": "Allow sending log messages to Rollbar",
 648 |                 "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
 649 |                 "sentry/sentry": "Allow sending log messages to a Sentry server"
 650 |             },
 651 |             "type": "library",
 652 |             "extra": {
 653 |                 "branch-alias": {
 654 |                     "dev-master": "2.0.x-dev"
 655 |                 }
 656 |             },
 657 |             "autoload": {
 658 |                 "psr-4": {
 659 |                     "Monolog\\": "src/Monolog"
 660 |                 }
 661 |             },
 662 |             "notification-url": "https://packagist.org/downloads/",
 663 |             "license": [
 664 |                 "MIT"
 665 |             ],
 666 |             "authors": [
 667 |                 {
 668 |                     "name": "Jordi Boggiano",
 669 |                     "email": "j.boggiano@seld.be",
 670 |                     "homepage": "http://seld.be"
 671 |                 }
 672 |             ],
 673 |             "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
 674 |             "homepage": "http://github.com/Seldaek/monolog",
 675 |             "keywords": [
 676 |                 "log",
 677 |                 "logging",
 678 |                 "psr-3"
 679 |             ],
 680 |             "time": "2017-06-19T01:22:40+00:00"
 681 |         },
 682 |         {
 683 |             "name": "nesbot/carbon",
 684 |             "version": "dev-master",
 685 |             "source": {
 686 |                 "type": "git",
 687 |                 "url": "https://github.com/briannesbitt/Carbon.git",
 688 |                 "reference": "926aee5ab38c2868816aa760f862a85ad01cb61a"
 689 |             },
 690 |             "dist": {
 691 |                 "type": "zip",
 692 |                 "url": "https://files.phpcomposer.com/files/briannesbitt/Carbon/926aee5ab38c2868816aa760f862a85ad01cb61a.zip",
 693 |                 "reference": "926aee5ab38c2868816aa760f862a85ad01cb61a",
 694 |                 "shasum": ""
 695 |             },
 696 |             "require": {
 697 |                 "php": ">=5.3.0",
 698 |                 "symfony/translation": "~2.6 || ~3.0"
 699 |             },
 700 |             "require-dev": {
 701 |                 "friendsofphp/php-cs-fixer": "~2",
 702 |                 "phpunit/phpunit": "~4.0 || ~5.0"
 703 |             },
 704 |             "type": "library",
 705 |             "extra": {
 706 |                 "branch-alias": {
 707 |                     "dev-master": "1.23-dev"
 708 |                 }
 709 |             },
 710 |             "autoload": {
 711 |                 "psr-4": {
 712 |                     "Carbon\\": "src/Carbon/"
 713 |                 }
 714 |             },
 715 |             "notification-url": "https://packagist.org/downloads/",
 716 |             "license": [
 717 |                 "MIT"
 718 |             ],
 719 |             "authors": [
 720 |                 {
 721 |                     "name": "Brian Nesbitt",
 722 |                     "email": "brian@nesbot.com",
 723 |                     "homepage": "http://nesbot.com"
 724 |                 }
 725 |             ],
 726 |             "description": "A simple API extension for DateTime.",
 727 |             "homepage": "http://carbon.nesbot.com",
 728 |             "keywords": [
 729 |                 "date",
 730 |                 "datetime",
 731 |                 "time"
 732 |             ],
 733 |             "time": "2017-02-06T22:02:47+00:00"
 734 |         },
 735 |         {
 736 |             "name": "phpcasts/yaf-console",
 737 |             "version": "dev-master",
 738 |             "source": {
 739 |                 "type": "git",
 740 |                 "url": "https://github.com/qloog/yaf-console.git",
 741 |                 "reference": "229c3381414bdd9c994323097957505265b44a2a"
 742 |             },
 743 |             "dist": {
 744 |                 "type": "zip",
 745 |                 "url": "https://api.github.com/repos/qloog/yaf-console/zipball/229c3381414bdd9c994323097957505265b44a2a",
 746 |                 "reference": "229c3381414bdd9c994323097957505265b44a2a",
 747 |                 "shasum": ""
 748 |             },
 749 |             "require": {
 750 |                 "symfony/console": "^3.2",
 751 |                 "symfony/process": "^3.2"
 752 |             },
 753 |             "type": "library",
 754 |             "autoload": {
 755 |                 "psr-4": {
 756 |                     "PHPCasts\\Console\\": "src/",
 757 |                     "Symfony\\Component\\Process\\": ""
 758 |                 }
 759 |             },
 760 |             "notification-url": "https://packagist.org/downloads/",
 761 |             "license": [
 762 |                 "MIT"
 763 |             ],
 764 |             "authors": [
 765 |                 {
 766 |                     "name": "qloog",
 767 |                     "email": "quanlongwang@gmail.com"
 768 |                 }
 769 |             ],
 770 |             "description": "make controller,model,plugin,view by this tool",
 771 |             "keywords": [
 772 |                 "yaf generator",
 773 |                 "yaf-command",
 774 |                 "yaf-console",
 775 |                 "yaf命令行工具",
 776 |                 "yaf组件生成器"
 777 |             ],
 778 |             "time": "2017-11-03T15:09:46+00:00"
 779 |         },
 780 |         {
 781 |             "name": "phpcasts/yaf-library",
 782 |             "version": "dev-master",
 783 |             "source": {
 784 |                 "type": "git",
 785 |                 "url": "https://github.com/qloog/yaf-library.git",
 786 |                 "reference": "59cc082c5f51a47c5fe3c59c0b6c1ebeeb29ff1e"
 787 |             },
 788 |             "dist": {
 789 |                 "type": "zip",
 790 |                 "url": "https://api.github.com/repos/qloog/yaf-library/zipball/59cc082c5f51a47c5fe3c59c0b6c1ebeeb29ff1e",
 791 |                 "reference": "59cc082c5f51a47c5fe3c59c0b6c1ebeeb29ff1e",
 792 |                 "shasum": ""
 793 |             },
 794 |             "require": {
 795 |                 "ext-yaf": "*",
 796 |                 "monolog/monolog": "^1.13",
 797 |                 "php": ">=7.0",
 798 |                 "phpcasts/yaf-console": "*",
 799 |                 "pimple/pimple": "^3.0"
 800 |             },
 801 |             "require-dev": {
 802 |                 "phpunit/phpunit": "4.7.3"
 803 |             },
 804 |             "type": "library",
 805 |             "autoload": {
 806 |                 "psr-4": {
 807 |                     "PHPCasts\\Yaf\\": "src/"
 808 |                 }
 809 |             },
 810 |             "notification-url": "https://packagist.org/downloads/",
 811 |             "license": [
 812 |                 "MIT"
 813 |             ],
 814 |             "description": "yaf-library",
 815 |             "keywords": [
 816 |                 "library",
 817 |                 "yaf",
 818 |                 "yaf-library"
 819 |             ],
 820 |             "time": "2018-06-07T06:51:14+00:00"
 821 |         },
 822 |         {
 823 |             "name": "pimple/pimple",
 824 |             "version": "dev-master",
 825 |             "source": {
 826 |                 "type": "git",
 827 |                 "url": "https://github.com/silexphp/Pimple.git",
 828 |                 "reference": "b5e5c1809fc323428715aa6a66ddca180e0adc0f"
 829 |             },
 830 |             "dist": {
 831 |                 "type": "zip",
 832 |                 "url": "https://api.github.com/repos/silexphp/Pimple/zipball/b5e5c1809fc323428715aa6a66ddca180e0adc0f",
 833 |                 "reference": "b5e5c1809fc323428715aa6a66ddca180e0adc0f",
 834 |                 "shasum": ""
 835 |             },
 836 |             "require": {
 837 |                 "php": ">=5.3.0",
 838 |                 "psr/container": "^1.0"
 839 |             },
 840 |             "require-dev": {
 841 |                 "symfony/phpunit-bridge": "^3.2"
 842 |             },
 843 |             "type": "library",
 844 |             "extra": {
 845 |                 "branch-alias": {
 846 |                     "dev-master": "3.2.x-dev"
 847 |                 }
 848 |             },
 849 |             "autoload": {
 850 |                 "psr-0": {
 851 |                     "Pimple": "src/"
 852 |                 }
 853 |             },
 854 |             "notification-url": "https://packagist.org/downloads/",
 855 |             "license": [
 856 |                 "MIT"
 857 |             ],
 858 |             "authors": [
 859 |                 {
 860 |                     "name": "Fabien Potencier",
 861 |                     "email": "fabien@symfony.com"
 862 |                 }
 863 |             ],
 864 |             "description": "Pimple, a simple Dependency Injection Container",
 865 |             "homepage": "http://pimple.sensiolabs.org",
 866 |             "keywords": [
 867 |                 "container",
 868 |                 "dependency injection"
 869 |             ],
 870 |             "time": "2017-08-23T11:42:00+00:00"
 871 |         },
 872 |         {
 873 |             "name": "psr/container",
 874 |             "version": "dev-master",
 875 |             "source": {
 876 |                 "type": "git",
 877 |                 "url": "https://github.com/php-fig/container.git",
 878 |                 "reference": "2cc4a01788191489dc7459446ba832fa79a216a7"
 879 |             },
 880 |             "dist": {
 881 |                 "type": "zip",
 882 |                 "url": "https://api.github.com/repos/php-fig/container/zipball/2cc4a01788191489dc7459446ba832fa79a216a7",
 883 |                 "reference": "2cc4a01788191489dc7459446ba832fa79a216a7",
 884 |                 "shasum": ""
 885 |             },
 886 |             "require": {
 887 |                 "php": ">=5.3.0"
 888 |             },
 889 |             "type": "library",
 890 |             "extra": {
 891 |                 "branch-alias": {
 892 |                     "dev-master": "1.0.x-dev"
 893 |                 }
 894 |             },
 895 |             "autoload": {
 896 |                 "psr-4": {
 897 |                     "Psr\\Container\\": "src/"
 898 |                 }
 899 |             },
 900 |             "notification-url": "https://packagist.org/downloads/",
 901 |             "license": [
 902 |                 "MIT"
 903 |             ],
 904 |             "authors": [
 905 |                 {
 906 |                     "name": "PHP-FIG",
 907 |                     "homepage": "http://www.php-fig.org/"
 908 |                 }
 909 |             ],
 910 |             "description": "Common Container Interface (PHP FIG PSR-11)",
 911 |             "homepage": "https://github.com/php-fig/container",
 912 |             "keywords": [
 913 |                 "PSR-11",
 914 |                 "container",
 915 |                 "container-interface",
 916 |                 "container-interop",
 917 |                 "psr"
 918 |             ],
 919 |             "time": "2017-06-28T15:35:32+00:00"
 920 |         },
 921 |         {
 922 |             "name": "psr/http-message",
 923 |             "version": "dev-master",
 924 |             "source": {
 925 |                 "type": "git",
 926 |                 "url": "https://github.com/php-fig/http-message.git",
 927 |                 "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
 928 |             },
 929 |             "dist": {
 930 |                 "type": "zip",
 931 |                 "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
 932 |                 "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
 933 |                 "shasum": ""
 934 |             },
 935 |             "require": {
 936 |                 "php": ">=5.3.0"
 937 |             },
 938 |             "type": "library",
 939 |             "extra": {
 940 |                 "branch-alias": {
 941 |                     "dev-master": "1.0.x-dev"
 942 |                 }
 943 |             },
 944 |             "autoload": {
 945 |                 "psr-4": {
 946 |                     "Psr\\Http\\Message\\": "src/"
 947 |                 }
 948 |             },
 949 |             "notification-url": "https://packagist.org/downloads/",
 950 |             "license": [
 951 |                 "MIT"
 952 |             ],
 953 |             "authors": [
 954 |                 {
 955 |                     "name": "PHP-FIG",
 956 |                     "homepage": "http://www.php-fig.org/"
 957 |                 }
 958 |             ],
 959 |             "description": "Common interface for HTTP messages",
 960 |             "homepage": "https://github.com/php-fig/http-message",
 961 |             "keywords": [
 962 |                 "http",
 963 |                 "http-message",
 964 |                 "psr",
 965 |                 "psr-7",
 966 |                 "request",
 967 |                 "response"
 968 |             ],
 969 |             "time": "2016-08-06T14:39:51+00:00"
 970 |         },
 971 |         {
 972 |             "name": "psr/log",
 973 |             "version": "dev-master",
 974 |             "source": {
 975 |                 "type": "git",
 976 |                 "url": "https://github.com/php-fig/log.git",
 977 |                 "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
 978 |             },
 979 |             "dist": {
 980 |                 "type": "zip",
 981 |                 "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
 982 |                 "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
 983 |                 "shasum": ""
 984 |             },
 985 |             "require": {
 986 |                 "php": ">=5.3.0"
 987 |             },
 988 |             "type": "library",
 989 |             "extra": {
 990 |                 "branch-alias": {
 991 |                     "dev-master": "1.0.x-dev"
 992 |                 }
 993 |             },
 994 |             "autoload": {
 995 |                 "psr-4": {
 996 |                     "Psr\\Log\\": "Psr/Log/"
 997 |                 }
 998 |             },
 999 |             "notification-url": "https://packagist.org/downloads/",
1000 |             "license": [
1001 |                 "MIT"
1002 |             ],
1003 |             "authors": [
1004 |                 {
1005 |                     "name": "PHP-FIG",
1006 |                     "homepage": "http://www.php-fig.org/"
1007 |                 }
1008 |             ],
1009 |             "description": "Common interface for logging libraries",
1010 |             "homepage": "https://github.com/php-fig/log",
1011 |             "keywords": [
1012 |                 "log",
1013 |                 "psr",
1014 |                 "psr-3"
1015 |             ],
1016 |             "time": "2016-10-10T12:19:37+00:00"
1017 |         },
1018 |         {
1019 |             "name": "psr/simple-cache",
1020 |             "version": "dev-master",
1021 |             "source": {
1022 |                 "type": "git",
1023 |                 "url": "https://github.com/php-fig/simple-cache.git",
1024 |                 "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24"
1025 |             },
1026 |             "dist": {
1027 |                 "type": "zip",
1028 |                 "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/753fa598e8f3b9966c886fe13f370baa45ef0e24",
1029 |                 "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24",
1030 |                 "shasum": ""
1031 |             },
1032 |             "require": {
1033 |                 "php": ">=5.3.0"
1034 |             },
1035 |             "type": "library",
1036 |             "extra": {
1037 |                 "branch-alias": {
1038 |                     "dev-master": "1.0.x-dev"
1039 |                 }
1040 |             },
1041 |             "autoload": {
1042 |                 "psr-4": {
1043 |                     "Psr\\SimpleCache\\": "src/"
1044 |                 }
1045 |             },
1046 |             "notification-url": "https://packagist.org/downloads/",
1047 |             "license": [
1048 |                 "MIT"
1049 |             ],
1050 |             "authors": [
1051 |                 {
1052 |                     "name": "PHP-FIG",
1053 |                     "homepage": "http://www.php-fig.org/"
1054 |                 }
1055 |             ],
1056 |             "description": "Common interfaces for simple caching",
1057 |             "keywords": [
1058 |                 "cache",
1059 |                 "caching",
1060 |                 "psr",
1061 |                 "psr-16",
1062 |                 "simple-cache"
1063 |             ],
1064 |             "time": "2017-01-02T13:31:39+00:00"
1065 |         },
1066 |         {
1067 |             "name": "symfony/console",
1068 |             "version": "3.4.x-dev",
1069 |             "source": {
1070 |                 "type": "git",
1071 |                 "url": "https://github.com/symfony/console.git",
1072 |                 "reference": "78d1370ad8d26a3f1bc117a2ac3af419aaf5c37e"
1073 |             },
1074 |             "dist": {
1075 |                 "type": "zip",
1076 |                 "url": "https://api.github.com/repos/symfony/console/zipball/78d1370ad8d26a3f1bc117a2ac3af419aaf5c37e",
1077 |                 "reference": "78d1370ad8d26a3f1bc117a2ac3af419aaf5c37e",
1078 |                 "shasum": ""
1079 |             },
1080 |             "require": {
1081 |                 "php": "^5.5.9|>=7.0.8",
1082 |                 "symfony/debug": "~2.8|~3.0|~4.0",
1083 |                 "symfony/polyfill-mbstring": "~1.0"
1084 |             },
1085 |             "conflict": {
1086 |                 "symfony/dependency-injection": "<3.3",
1087 |                 "symfony/process": "<3.3"
1088 |             },
1089 |             "require-dev": {
1090 |                 "psr/log": "~1.0",
1091 |                 "symfony/config": "~3.3|~4.0",
1092 |                 "symfony/dependency-injection": "~3.3|~4.0",
1093 |                 "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
1094 |                 "symfony/lock": "~3.4|~4.0",
1095 |                 "symfony/process": "~3.3|~4.0"
1096 |             },
1097 |             "suggest": {
1098 |                 "psr/log": "For using the console logger",
1099 |                 "symfony/event-dispatcher": "",
1100 |                 "symfony/lock": "",
1101 |                 "symfony/process": ""
1102 |             },
1103 |             "type": "library",
1104 |             "extra": {
1105 |                 "branch-alias": {
1106 |                     "dev-master": "3.4-dev"
1107 |                 }
1108 |             },
1109 |             "autoload": {
1110 |                 "psr-4": {
1111 |                     "Symfony\\Component\\Console\\": ""
1112 |                 },
1113 |                 "exclude-from-classmap": [
1114 |                     "/Tests/"
1115 |                 ]
1116 |             },
1117 |             "notification-url": "https://packagist.org/downloads/",
1118 |             "license": [
1119 |                 "MIT"
1120 |             ],
1121 |             "authors": [
1122 |                 {
1123 |                     "name": "Fabien Potencier",
1124 |                     "email": "fabien@symfony.com"
1125 |                 },
1126 |                 {
1127 |                     "name": "Symfony Community",
1128 |                     "homepage": "https://symfony.com/contributors"
1129 |                 }
1130 |             ],
1131 |             "description": "Symfony Console Component",
1132 |             "homepage": "https://symfony.com",
1133 |             "time": "2017-09-03T15:31:40+00:00"
1134 |         },
1135 |         {
1136 |             "name": "symfony/debug",
1137 |             "version": "3.4.x-dev",
1138 |             "source": {
1139 |                 "type": "git",
1140 |                 "url": "https://github.com/symfony/debug.git",
1141 |                 "reference": "33f6f36c28f4f280e5c999e556473bc98d8b173f"
1142 |             },
1143 |             "dist": {
1144 |                 "type": "zip",
1145 |                 "url": "https://api.github.com/repos/symfony/debug/zipball/33f6f36c28f4f280e5c999e556473bc98d8b173f",
1146 |                 "reference": "33f6f36c28f4f280e5c999e556473bc98d8b173f",
1147 |                 "shasum": ""
1148 |             },
1149 |             "require": {
1150 |                 "php": "^5.5.9|>=7.0.8",
1151 |                 "psr/log": "~1.0"
1152 |             },
1153 |             "conflict": {
1154 |                 "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
1155 |             },
1156 |             "require-dev": {
1157 |                 "symfony/http-kernel": "~2.8|~3.0|~4.0"
1158 |             },
1159 |             "type": "library",
1160 |             "extra": {
1161 |                 "branch-alias": {
1162 |                     "dev-master": "3.4-dev"
1163 |                 }
1164 |             },
1165 |             "autoload": {
1166 |                 "psr-4": {
1167 |                     "Symfony\\Component\\Debug\\": ""
1168 |                 },
1169 |                 "exclude-from-classmap": [
1170 |                     "/Tests/"
1171 |                 ]
1172 |             },
1173 |             "notification-url": "https://packagist.org/downloads/",
1174 |             "license": [
1175 |                 "MIT"
1176 |             ],
1177 |             "authors": [
1178 |                 {
1179 |                     "name": "Fabien Potencier",
1180 |                     "email": "fabien@symfony.com"
1181 |                 },
1182 |                 {
1183 |                     "name": "Symfony Community",
1184 |                     "homepage": "https://symfony.com/contributors"
1185 |                 }
1186 |             ],
1187 |             "description": "Symfony Debug Component",
1188 |             "homepage": "https://symfony.com",
1189 |             "time": "2017-09-03T14:49:34+00:00"
1190 |         },
1191 |         {
1192 |             "name": "symfony/finder",
1193 |             "version": "3.4.x-dev",
1194 |             "source": {
1195 |                 "type": "git",
1196 |                 "url": "https://github.com/symfony/finder.git",
1197 |                 "reference": "29422c4e871dd668ecac0e8075cf64dccdabff46"
1198 |             },
1199 |             "dist": {
1200 |                 "type": "zip",
1201 |                 "url": "https://api.github.com/repos/symfony/finder/zipball/29422c4e871dd668ecac0e8075cf64dccdabff46",
1202 |                 "reference": "29422c4e871dd668ecac0e8075cf64dccdabff46",
1203 |                 "shasum": ""
1204 |             },
1205 |             "require": {
1206 |                 "php": "^5.5.9|>=7.0.8"
1207 |             },
1208 |             "type": "library",
1209 |             "extra": {
1210 |                 "branch-alias": {
1211 |                     "dev-master": "3.4-dev"
1212 |                 }
1213 |             },
1214 |             "autoload": {
1215 |                 "psr-4": {
1216 |                     "Symfony\\Component\\Finder\\": ""
1217 |                 },
1218 |                 "exclude-from-classmap": [
1219 |                     "/Tests/"
1220 |                 ]
1221 |             },
1222 |             "notification-url": "https://packagist.org/downloads/",
1223 |             "license": [
1224 |                 "MIT"
1225 |             ],
1226 |             "authors": [
1227 |                 {
1228 |                     "name": "Fabien Potencier",
1229 |                     "email": "fabien@symfony.com"
1230 |                 },
1231 |                 {
1232 |                     "name": "Symfony Community",
1233 |                     "homepage": "https://symfony.com/contributors"
1234 |                 }
1235 |             ],
1236 |             "description": "Symfony Finder Component",
1237 |             "homepage": "https://symfony.com",
1238 |             "time": "2017-10-24T14:12:06+00:00"
1239 |         },
1240 |         {
1241 |             "name": "symfony/polyfill-mbstring",
1242 |             "version": "dev-master",
1243 |             "source": {
1244 |                 "type": "git",
1245 |                 "url": "https://github.com/symfony/polyfill-mbstring.git",
1246 |                 "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803"
1247 |             },
1248 |             "dist": {
1249 |                 "type": "zip",
1250 |                 "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7c8fae0ac1d216eb54349e6a8baa57d515fe8803",
1251 |                 "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803",
1252 |                 "shasum": ""
1253 |             },
1254 |             "require": {
1255 |                 "php": ">=5.3.3"
1256 |             },
1257 |             "suggest": {
1258 |                 "ext-mbstring": "For best performance"
1259 |             },
1260 |             "type": "library",
1261 |             "extra": {
1262 |                 "branch-alias": {
1263 |                     "dev-master": "1.5-dev"
1264 |                 }
1265 |             },
1266 |             "autoload": {
1267 |                 "psr-4": {
1268 |                     "Symfony\\Polyfill\\Mbstring\\": ""
1269 |                 },
1270 |                 "files": [
1271 |                     "bootstrap.php"
1272 |                 ]
1273 |             },
1274 |             "notification-url": "https://packagist.org/downloads/",
1275 |             "license": [
1276 |                 "MIT"
1277 |             ],
1278 |             "authors": [
1279 |                 {
1280 |                     "name": "Nicolas Grekas",
1281 |                     "email": "p@tchwork.com"
1282 |                 },
1283 |                 {
1284 |                     "name": "Symfony Community",
1285 |                     "homepage": "https://symfony.com/contributors"
1286 |                 }
1287 |             ],
1288 |             "description": "Symfony polyfill for the Mbstring extension",
1289 |             "homepage": "https://symfony.com",
1290 |             "keywords": [
1291 |                 "compatibility",
1292 |                 "mbstring",
1293 |                 "polyfill",
1294 |                 "portable",
1295 |                 "shim"
1296 |             ],
1297 |             "time": "2017-06-14T15:44:48+00:00"
1298 |         },
1299 |         {
1300 |             "name": "symfony/process",
1301 |             "version": "3.4.x-dev",
1302 |             "source": {
1303 |                 "type": "git",
1304 |                 "url": "https://github.com/symfony/process.git",
1305 |                 "reference": "9794f948d9af3be0157185051275d78b24d68b92"
1306 |             },
1307 |             "dist": {
1308 |                 "type": "zip",
1309 |                 "url": "https://api.github.com/repos/symfony/process/zipball/9794f948d9af3be0157185051275d78b24d68b92",
1310 |                 "reference": "9794f948d9af3be0157185051275d78b24d68b92",
1311 |                 "shasum": ""
1312 |             },
1313 |             "require": {
1314 |                 "php": "^5.5.9|>=7.0.8"
1315 |             },
1316 |             "type": "library",
1317 |             "extra": {
1318 |                 "branch-alias": {
1319 |                     "dev-master": "3.4-dev"
1320 |                 }
1321 |             },
1322 |             "autoload": {
1323 |                 "psr-4": {
1324 |                     "Symfony\\Component\\Process\\": ""
1325 |                 },
1326 |                 "exclude-from-classmap": [
1327 |                     "/Tests/"
1328 |                 ]
1329 |             },
1330 |             "notification-url": "https://packagist.org/downloads/",
1331 |             "license": [
1332 |                 "MIT"
1333 |             ],
1334 |             "authors": [
1335 |                 {
1336 |                     "name": "Fabien Potencier",
1337 |                     "email": "fabien@symfony.com"
1338 |                 },
1339 |                 {
1340 |                     "name": "Symfony Community",
1341 |                     "homepage": "https://symfony.com/contributors"
1342 |                 }
1343 |             ],
1344 |             "description": "Symfony Process Component",
1345 |             "homepage": "https://symfony.com",
1346 |             "time": "2017-08-03T09:34:20+00:00"
1347 |         },
1348 |         {
1349 |             "name": "symfony/translation",
1350 |             "version": "3.4.x-dev",
1351 |             "source": {
1352 |                 "type": "git",
1353 |                 "url": "https://github.com/symfony/translation.git",
1354 |                 "reference": "f9448c88e4fee566626d4bea08948535b714ffd4"
1355 |             },
1356 |             "dist": {
1357 |                 "type": "zip",
1358 |                 "url": "https://api.github.com/repos/symfony/translation/zipball/f9448c88e4fee566626d4bea08948535b714ffd4",
1359 |                 "reference": "f9448c88e4fee566626d4bea08948535b714ffd4",
1360 |                 "shasum": ""
1361 |             },
1362 |             "require": {
1363 |                 "php": "^5.5.9|>=7.0.8",
1364 |                 "symfony/polyfill-mbstring": "~1.0"
1365 |             },
1366 |             "conflict": {
1367 |                 "symfony/config": "<2.8",
1368 |                 "symfony/dependency-injection": "<3.4",
1369 |                 "symfony/yaml": "<3.3"
1370 |             },
1371 |             "require-dev": {
1372 |                 "psr/log": "~1.0",
1373 |                 "symfony/config": "~2.8|~3.0|~4.0",
1374 |                 "symfony/dependency-injection": "~3.4|~4.0",
1375 |                 "symfony/finder": "~2.8|~3.0|~4.0",
1376 |                 "symfony/intl": "^2.8.18|^3.2.5|~4.0",
1377 |                 "symfony/yaml": "~3.3|~4.0"
1378 |             },
1379 |             "suggest": {
1380 |                 "psr/log": "To use logging capability in translator",
1381 |                 "symfony/config": "",
1382 |                 "symfony/yaml": ""
1383 |             },
1384 |             "type": "library",
1385 |             "extra": {
1386 |                 "branch-alias": {
1387 |                     "dev-master": "3.4-dev"
1388 |                 }
1389 |             },
1390 |             "autoload": {
1391 |                 "psr-4": {
1392 |                     "Symfony\\Component\\Translation\\": ""
1393 |                 },
1394 |                 "exclude-from-classmap": [
1395 |                     "/Tests/"
1396 |                 ]
1397 |             },
1398 |             "notification-url": "https://packagist.org/downloads/",
1399 |             "license": [
1400 |                 "MIT"
1401 |             ],
1402 |             "authors": [
1403 |                 {
1404 |                     "name": "Fabien Potencier",
1405 |                     "email": "fabien@symfony.com"
1406 |                 },
1407 |                 {
1408 |                     "name": "Symfony Community",
1409 |                     "homepage": "https://symfony.com/contributors"
1410 |                 }
1411 |             ],
1412 |             "description": "Symfony Translation Component",
1413 |             "homepage": "https://symfony.com",
1414 |             "time": "2017-08-29T14:37:52+00:00"
1415 |         },
1416 |         {
1417 |             "name": "twig/twig",
1418 |             "version": "dev-master",
1419 |             "source": {
1420 |                 "type": "git",
1421 |                 "url": "https://github.com/twigphp/Twig.git",
1422 |                 "reference": "86c39d944d37aa9be86cfb3c705222abc9ee9f20"
1423 |             },
1424 |             "dist": {
1425 |                 "type": "zip",
1426 |                 "url": "https://files.phpcomposer.com/files/twigphp/Twig/86c39d944d37aa9be86cfb3c705222abc9ee9f20.zip",
1427 |                 "reference": "86c39d944d37aa9be86cfb3c705222abc9ee9f20",
1428 |                 "shasum": ""
1429 |             },
1430 |             "require": {
1431 |                 "php": "^7.0",
1432 |                 "symfony/polyfill-mbstring": "~1.0"
1433 |             },
1434 |             "require-dev": {
1435 |                 "psr/container": "^1.0",
1436 |                 "symfony/debug": "~2.7",
1437 |                 "symfony/phpunit-bridge": "~3.3@dev"
1438 |             },
1439 |             "type": "library",
1440 |             "extra": {
1441 |                 "branch-alias": {
1442 |                     "dev-master": "3.0-dev"
1443 |                 }
1444 |             },
1445 |             "autoload": {
1446 |                 "psr-0": {
1447 |                     "Twig_": "lib/"
1448 |                 },
1449 |                 "psr-4": {
1450 |                     "Twig\\": "src/"
1451 |                 }
1452 |             },
1453 |             "notification-url": "https://packagist.org/downloads/",
1454 |             "license": [
1455 |                 "BSD-3-Clause"
1456 |             ],
1457 |             "authors": [
1458 |                 {
1459 |                     "name": "Fabien Potencier",
1460 |                     "email": "fabien@symfony.com",
1461 |                     "homepage": "http://fabien.potencier.org",
1462 |                     "role": "Lead Developer"
1463 |                 },
1464 |                 {
1465 |                     "name": "Armin Ronacher",
1466 |                     "email": "armin.ronacher@active-4.com",
1467 |                     "role": "Project Founder"
1468 |                 },
1469 |                 {
1470 |                     "name": "Twig Team",
1471 |                     "homepage": "http://twig.sensiolabs.org/contributors",
1472 |                     "role": "Contributors"
1473 |                 }
1474 |             ],
1475 |             "description": "Twig, the flexible, fast, and secure template language for PHP",
1476 |             "homepage": "http://twig.sensiolabs.org",
1477 |             "keywords": [
1478 |                 "templating"
1479 |             ],
1480 |             "time": "2017-08-01T06:24:44+00:00"
1481 |         }
1482 |     ],
1483 |     "packages-dev": [
1484 |         {
1485 |             "name": "doctrine/instantiator",
1486 |             "version": "dev-master",
1487 |             "source": {
1488 |                 "type": "git",
1489 |                 "url": "https://github.com/doctrine/instantiator.git",
1490 |                 "reference": "5acd2bd8c2b600ad5cc4c9180ebf0a930604d6a5"
1491 |             },
1492 |             "dist": {
1493 |                 "type": "zip",
1494 |                 "url": "https://api.github.com/repos/doctrine/instantiator/zipball/5acd2bd8c2b600ad5cc4c9180ebf0a930604d6a5",
1495 |                 "reference": "5acd2bd8c2b600ad5cc4c9180ebf0a930604d6a5",
1496 |                 "shasum": ""
1497 |             },
1498 |             "require": {
1499 |                 "php": ">=5.3,<8.0-DEV"
1500 |             },
1501 |             "require-dev": {
1502 |                 "athletic/athletic": "~0.1.8",
1503 |                 "ext-pdo": "*",
1504 |                 "ext-phar": "*",
1505 |                 "phpunit/phpunit": "~4.0",
1506 |                 "squizlabs/php_codesniffer": "~2.0"
1507 |             },
1508 |             "type": "library",
1509 |             "extra": {
1510 |                 "branch-alias": {
1511 |                     "dev-master": "1.0.x-dev"
1512 |                 }
1513 |             },
1514 |             "autoload": {
1515 |                 "psr-4": {
1516 |                     "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
1517 |                 }
1518 |             },
1519 |             "notification-url": "https://packagist.org/downloads/",
1520 |             "license": [
1521 |                 "MIT"
1522 |             ],
1523 |             "authors": [
1524 |                 {
1525 |                     "name": "Marco Pivetta",
1526 |                     "email": "ocramius@gmail.com",
1527 |                     "homepage": "http://ocramius.github.com/"
1528 |                 }
1529 |             ],
1530 |             "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
1531 |             "homepage": "https://github.com/doctrine/instantiator",
1532 |             "keywords": [
1533 |                 "constructor",
1534 |                 "instantiate"
1535 |             ],
1536 |             "time": "2017-02-16T16:15:51+00:00"
1537 |         },
1538 |         {
1539 |             "name": "myclabs/deep-copy",
1540 |             "version": "1.x-dev",
1541 |             "source": {
1542 |                 "type": "git",
1543 |                 "url": "https://github.com/myclabs/DeepCopy.git",
1544 |                 "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102"
1545 |             },
1546 |             "dist": {
1547 |                 "type": "zip",
1548 |                 "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/8e6e04167378abf1ddb4d3522d8755c5fd90d102",
1549 |                 "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102",
1550 |                 "shasum": ""
1551 |             },
1552 |             "require": {
1553 |                 "php": ">=5.4.0"
1554 |             },
1555 |             "require-dev": {
1556 |                 "doctrine/collections": "1.*",
1557 |                 "phpunit/phpunit": "~4.1"
1558 |             },
1559 |             "type": "library",
1560 |             "autoload": {
1561 |                 "psr-4": {
1562 |                     "DeepCopy\\": "src/DeepCopy/"
1563 |                 }
1564 |             },
1565 |             "notification-url": "https://packagist.org/downloads/",
1566 |             "license": [
1567 |                 "MIT"
1568 |             ],
1569 |             "description": "Create deep copies (clones) of your objects",
1570 |             "homepage": "https://github.com/myclabs/DeepCopy",
1571 |             "keywords": [
1572 |                 "clone",
1573 |                 "copy",
1574 |                 "duplicate",
1575 |                 "object",
1576 |                 "object graph"
1577 |             ],
1578 |             "time": "2017-04-12T18:52:22+00:00"
1579 |         },
1580 |         {
1581 |             "name": "phar-io/manifest",
1582 |             "version": "dev-master",
1583 |             "source": {
1584 |                 "type": "git",
1585 |                 "url": "https://github.com/phar-io/manifest.git",
1586 |                 "reference": "014feadb268809af7c8e2f7ccd396b8494901f58"
1587 |             },
1588 |             "dist": {
1589 |                 "type": "zip",
1590 |                 "url": "https://api.github.com/repos/phar-io/manifest/zipball/014feadb268809af7c8e2f7ccd396b8494901f58",
1591 |                 "reference": "014feadb268809af7c8e2f7ccd396b8494901f58",
1592 |                 "shasum": ""
1593 |             },
1594 |             "require": {
1595 |                 "ext-dom": "*",
1596 |                 "ext-phar": "*",
1597 |                 "phar-io/version": "^1.0.1",
1598 |                 "php": "^5.6 || ^7.0"
1599 |             },
1600 |             "type": "library",
1601 |             "extra": {
1602 |                 "branch-alias": {
1603 |                     "dev-master": "1.0.x-dev"
1604 |                 }
1605 |             },
1606 |             "autoload": {
1607 |                 "classmap": [
1608 |                     "src/"
1609 |                 ]
1610 |             },
1611 |             "notification-url": "https://packagist.org/downloads/",
1612 |             "license": [
1613 |                 "BSD-3-Clause"
1614 |             ],
1615 |             "authors": [
1616 |                 {
1617 |                     "name": "Arne Blankerts",
1618 |                     "email": "arne@blankerts.de",
1619 |                     "role": "Developer"
1620 |                 },
1621 |                 {
1622 |                     "name": "Sebastian Heuer",
1623 |                     "email": "sebastian@phpeople.de",
1624 |                     "role": "Developer"
1625 |                 },
1626 |                 {
1627 |                     "name": "Sebastian Bergmann",
1628 |                     "email": "sebastian@phpunit.de",
1629 |                     "role": "Developer"
1630 |                 }
1631 |             ],
1632 |             "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
1633 |             "time": "2017-04-07T07:07:10+00:00"
1634 |         },
1635 |         {
1636 |             "name": "phar-io/version",
1637 |             "version": "1.0.1",
1638 |             "source": {
1639 |                 "type": "git",
1640 |                 "url": "https://github.com/phar-io/version.git",
1641 |                 "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df"
1642 |             },
1643 |             "dist": {
1644 |                 "type": "zip",
1645 |                 "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df",
1646 |                 "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df",
1647 |                 "shasum": ""
1648 |             },
1649 |             "require": {
1650 |                 "php": "^5.6 || ^7.0"
1651 |             },
1652 |             "type": "library",
1653 |             "autoload": {
1654 |                 "classmap": [
1655 |                     "src/"
1656 |                 ]
1657 |             },
1658 |             "notification-url": "https://packagist.org/downloads/",
1659 |             "license": [
1660 |                 "BSD-3-Clause"
1661 |             ],
1662 |             "authors": [
1663 |                 {
1664 |                     "name": "Arne Blankerts",
1665 |                     "email": "arne@blankerts.de",
1666 |                     "role": "Developer"
1667 |                 },
1668 |                 {
1669 |                     "name": "Sebastian Heuer",
1670 |                     "email": "sebastian@phpeople.de",
1671 |                     "role": "Developer"
1672 |                 },
1673 |                 {
1674 |                     "name": "Sebastian Bergmann",
1675 |                     "email": "sebastian@phpunit.de",
1676 |                     "role": "Developer"
1677 |                 }
1678 |             ],
1679 |             "description": "Library for handling version information and constraints",
1680 |             "time": "2017-03-05T17:38:23+00:00"
1681 |         },
1682 |         {
1683 |             "name": "phpdocumentor/reflection-common",
1684 |             "version": "dev-master",
1685 |             "source": {
1686 |                 "type": "git",
1687 |                 "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
1688 |                 "reference": "a046af61c36e9162372f205de091a1cab7340f1c"
1689 |             },
1690 |             "dist": {
1691 |                 "type": "zip",
1692 |                 "url": "https://files.phpcomposer.com/files/phpDocumentor/ReflectionCommon/a046af61c36e9162372f205de091a1cab7340f1c.zip",
1693 |                 "reference": "a046af61c36e9162372f205de091a1cab7340f1c",
1694 |                 "shasum": ""
1695 |             },
1696 |             "require": {
1697 |                 "php": ">=5.5"
1698 |             },
1699 |             "require-dev": {
1700 |                 "phpunit/phpunit": "^4.6"
1701 |             },
1702 |             "type": "library",
1703 |             "extra": {
1704 |                 "branch-alias": {
1705 |                     "dev-master": "1.0.x-dev"
1706 |                 }
1707 |             },
1708 |             "autoload": {
1709 |                 "psr-4": {
1710 |                     "phpDocumentor\\Reflection\\": [
1711 |                         "src"
1712 |                     ]
1713 |                 }
1714 |             },
1715 |             "notification-url": "https://packagist.org/downloads/",
1716 |             "license": [
1717 |                 "MIT"
1718 |             ],
1719 |             "authors": [
1720 |                 {
1721 |                     "name": "Jaap van Otterdijk",
1722 |                     "email": "opensource@ijaap.nl"
1723 |                 }
1724 |             ],
1725 |             "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
1726 |             "homepage": "http://www.phpdoc.org",
1727 |             "keywords": [
1728 |                 "FQSEN",
1729 |                 "phpDocumentor",
1730 |                 "phpdoc",
1731 |                 "reflection",
1732 |                 "static analysis"
1733 |             ],
1734 |             "time": "2017-04-30T11:58:12+00:00"
1735 |         },
1736 |         {
1737 |             "name": "phpdocumentor/reflection-docblock",
1738 |             "version": "3.2.3",
1739 |             "source": {
1740 |                 "type": "git",
1741 |                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
1742 |                 "reference": "86e24012a3139b42a7b71155cfaa325389f00f1f"
1743 |             },
1744 |             "dist": {
1745 |                 "type": "zip",
1746 |                 "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/86e24012a3139b42a7b71155cfaa325389f00f1f",
1747 |                 "reference": "86e24012a3139b42a7b71155cfaa325389f00f1f",
1748 |                 "shasum": ""
1749 |             },
1750 |             "require": {
1751 |                 "php": "^7.0",
1752 |                 "phpdocumentor/reflection-common": "^1.0@dev",
1753 |                 "phpdocumentor/type-resolver": "^0.4.0",
1754 |                 "webmozart/assert": "^1.0"
1755 |             },
1756 |             "require-dev": {
1757 |                 "mockery/mockery": "^0.9.4",
1758 |                 "phpunit/phpunit": "^4.4"
1759 |             },
1760 |             "type": "library",
1761 |             "autoload": {
1762 |                 "psr-4": {
1763 |                     "phpDocumentor\\Reflection\\": [
1764 |                         "src/"
1765 |                     ]
1766 |                 }
1767 |             },
1768 |             "notification-url": "https://packagist.org/downloads/",
1769 |             "license": [
1770 |                 "MIT"
1771 |             ],
1772 |             "authors": [
1773 |                 {
1774 |                     "name": "Mike van Riel",
1775 |                     "email": "me@mikevanriel.com"
1776 |                 }
1777 |             ],
1778 |             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
1779 |             "time": "2017-08-29T19:37:41+00:00"
1780 |         },
1781 |         {
1782 |             "name": "phpdocumentor/type-resolver",
1783 |             "version": "0.4.0",
1784 |             "source": {
1785 |                 "type": "git",
1786 |                 "url": "https://github.com/phpDocumentor/TypeResolver.git",
1787 |                 "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
1788 |             },
1789 |             "dist": {
1790 |                 "type": "zip",
1791 |                 "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
1792 |                 "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
1793 |                 "shasum": ""
1794 |             },
1795 |             "require": {
1796 |                 "php": "^5.5 || ^7.0",
1797 |                 "phpdocumentor/reflection-common": "^1.0"
1798 |             },
1799 |             "require-dev": {
1800 |                 "mockery/mockery": "^0.9.4",
1801 |                 "phpunit/phpunit": "^5.2||^4.8.24"
1802 |             },
1803 |             "type": "library",
1804 |             "extra": {
1805 |                 "branch-alias": {
1806 |                     "dev-master": "1.0.x-dev"
1807 |                 }
1808 |             },
1809 |             "autoload": {
1810 |                 "psr-4": {
1811 |                     "phpDocumentor\\Reflection\\": [
1812 |                         "src/"
1813 |                     ]
1814 |                 }
1815 |             },
1816 |             "notification-url": "https://packagist.org/downloads/",
1817 |             "license": [
1818 |                 "MIT"
1819 |             ],
1820 |             "authors": [
1821 |                 {
1822 |                     "name": "Mike van Riel",
1823 |                     "email": "me@mikevanriel.com"
1824 |                 }
1825 |             ],
1826 |             "time": "2017-07-14T14:27:02+00:00"
1827 |         },
1828 |         {
1829 |             "name": "phpspec/prophecy",
1830 |             "version": "dev-master",
1831 |             "source": {
1832 |                 "type": "git",
1833 |                 "url": "https://github.com/phpspec/prophecy.git",
1834 |                 "reference": "c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6"
1835 |             },
1836 |             "dist": {
1837 |                 "type": "zip",
1838 |                 "url": "https://api.github.com/repos/phpspec/prophecy/zipball/c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6",
1839 |                 "reference": "c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6",
1840 |                 "shasum": ""
1841 |             },
1842 |             "require": {
1843 |                 "doctrine/instantiator": "^1.0.2",
1844 |                 "php": "^5.3|^7.0",
1845 |                 "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
1846 |                 "sebastian/comparator": "^1.1|^2.0",
1847 |                 "sebastian/recursion-context": "^1.0|^2.0|^3.0"
1848 |             },
1849 |             "require-dev": {
1850 |                 "phpspec/phpspec": "^2.5|^3.2",
1851 |                 "phpunit/phpunit": "^4.8 || ^5.6.5"
1852 |             },
1853 |             "type": "library",
1854 |             "extra": {
1855 |                 "branch-alias": {
1856 |                     "dev-master": "1.7.x-dev"
1857 |                 }
1858 |             },
1859 |             "autoload": {
1860 |                 "psr-0": {
1861 |                     "Prophecy\\": "src/"
1862 |                 }
1863 |             },
1864 |             "notification-url": "https://packagist.org/downloads/",
1865 |             "license": [
1866 |                 "MIT"
1867 |             ],
1868 |             "authors": [
1869 |                 {
1870 |                     "name": "Konstantin Kudryashov",
1871 |                     "email": "ever.zet@gmail.com",
1872 |                     "homepage": "http://everzet.com"
1873 |                 },
1874 |                 {
1875 |                     "name": "Marcello Duarte",
1876 |                     "email": "marcello.duarte@gmail.com"
1877 |                 }
1878 |             ],
1879 |             "description": "Highly opinionated mocking framework for PHP 5.3+",
1880 |             "homepage": "https://github.com/phpspec/prophecy",
1881 |             "keywords": [
1882 |                 "Double",
1883 |                 "Dummy",
1884 |                 "fake",
1885 |                 "mock",
1886 |                 "spy",
1887 |                 "stub"
1888 |             ],
1889 |             "time": "2017-09-04T11:05:03+00:00"
1890 |         },
1891 |         {
1892 |             "name": "phpunit/php-code-coverage",
1893 |             "version": "dev-master",
1894 |             "source": {
1895 |                 "type": "git",
1896 |                 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
1897 |                 "reference": "77a1ba8076365f943e2a3d75573b6c9822840ac6"
1898 |             },
1899 |             "dist": {
1900 |                 "type": "zip",
1901 |                 "url": "https://files.phpcomposer.com/files/sebastianbergmann/php-code-coverage/77a1ba8076365f943e2a3d75573b6c9822840ac6.zip",
1902 |                 "reference": "77a1ba8076365f943e2a3d75573b6c9822840ac6",
1903 |                 "shasum": ""
1904 |             },
1905 |             "require": {
1906 |                 "ext-dom": "*",
1907 |                 "ext-xmlwriter": "*",
1908 |                 "php": "^7.0",
1909 |                 "phpunit/php-file-iterator": "^1.4.2",
1910 |                 "phpunit/php-text-template": "^1.2.1",
1911 |                 "phpunit/php-token-stream": "^2.0",
1912 |                 "sebastian/code-unit-reverse-lookup": "^1.0.1",
1913 |                 "sebastian/environment": "^3.0",
1914 |                 "sebastian/version": "^2.0.1",
1915 |                 "theseer/tokenizer": "^1.1"
1916 |             },
1917 |             "require-dev": {
1918 |                 "ext-xdebug": "^2.5",
1919 |                 "phpunit/phpunit": "^6.0"
1920 |             },
1921 |             "suggest": {
1922 |                 "ext-xdebug": "^2.5.5"
1923 |             },
1924 |             "type": "library",
1925 |             "extra": {
1926 |                 "branch-alias": {
1927 |                     "dev-master": "5.2.x-dev"
1928 |                 }
1929 |             },
1930 |             "autoload": {
1931 |                 "classmap": [
1932 |                     "src/"
1933 |                 ]
1934 |             },
1935 |             "notification-url": "https://packagist.org/downloads/",
1936 |             "license": [
1937 |                 "BSD-3-Clause"
1938 |             ],
1939 |             "authors": [
1940 |                 {
1941 |                     "name": "Sebastian Bergmann",
1942 |                     "email": "sb@sebastian-bergmann.de",
1943 |                     "role": "lead"
1944 |                 }
1945 |             ],
1946 |             "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
1947 |             "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
1948 |             "keywords": [
1949 |                 "coverage",
1950 |                 "testing",
1951 |                 "xunit"
1952 |             ],
1953 |             "time": "2017-08-25T06:32:04+00:00"
1954 |         },
1955 |         {
1956 |             "name": "phpunit/php-file-iterator",
1957 |             "version": "dev-master",
1958 |             "source": {
1959 |                 "type": "git",
1960 |                 "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
1961 |                 "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5"
1962 |             },
1963 |             "dist": {
1964 |                 "type": "zip",
1965 |                 "url": "https://files.phpcomposer.com/files/sebastianbergmann/php-file-iterator/3cc8f69b3028d0f96a9078e6295d86e9bf019be5.zip",
1966 |                 "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5",
1967 |                 "shasum": ""
1968 |             },
1969 |             "require": {
1970 |                 "php": ">=5.3.3"
1971 |             },
1972 |             "type": "library",
1973 |             "extra": {
1974 |                 "branch-alias": {
1975 |                     "dev-master": "1.4.x-dev"
1976 |                 }
1977 |             },
1978 |             "autoload": {
1979 |                 "classmap": [
1980 |                     "src/"
1981 |                 ]
1982 |             },
1983 |             "notification-url": "https://packagist.org/downloads/",
1984 |             "license": [
1985 |                 "BSD-3-Clause"
1986 |             ],
1987 |             "authors": [
1988 |                 {
1989 |                     "name": "Sebastian Bergmann",
1990 |                     "email": "sb@sebastian-bergmann.de",
1991 |                     "role": "lead"
1992 |                 }
1993 |             ],
1994 |             "description": "FilterIterator implementation that filters files based on a list of suffixes.",
1995 |             "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
1996 |             "keywords": [
1997 |                 "filesystem",
1998 |                 "iterator"
1999 |             ],
2000 |             "time": "2016-10-03T07:40:28+00:00"
2001 |         },
2002 |         {
2003 |             "name": "phpunit/php-text-template",
2004 |             "version": "1.2.1",
2005 |             "source": {
2006 |                 "type": "git",
2007 |                 "url": "https://github.com/sebastianbergmann/php-text-template.git",
2008 |                 "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
2009 |             },
2010 |             "dist": {
2011 |                 "type": "zip",
2012 |                 "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
2013 |                 "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
2014 |                 "shasum": ""
2015 |             },
2016 |             "require": {
2017 |                 "php": ">=5.3.3"
2018 |             },
2019 |             "type": "library",
2020 |             "autoload": {
2021 |                 "classmap": [
2022 |                     "src/"
2023 |                 ]
2024 |             },
2025 |             "notification-url": "https://packagist.org/downloads/",
2026 |             "license": [
2027 |                 "BSD-3-Clause"
2028 |             ],
2029 |             "authors": [
2030 |                 {
2031 |                     "name": "Sebastian Bergmann",
2032 |                     "email": "sebastian@phpunit.de",
2033 |                     "role": "lead"
2034 |                 }
2035 |             ],
2036 |             "description": "Simple template engine.",
2037 |             "homepage": "https://github.com/sebastianbergmann/php-text-template/",
2038 |             "keywords": [
2039 |                 "template"
2040 |             ],
2041 |             "time": "2015-06-21T13:50:34+00:00"
2042 |         },
2043 |         {
2044 |             "name": "phpunit/php-timer",
2045 |             "version": "dev-master",
2046 |             "source": {
2047 |                 "type": "git",
2048 |                 "url": "https://github.com/sebastianbergmann/php-timer.git",
2049 |                 "reference": "d107f347d368dd8a384601398280c7c608390ab7"
2050 |             },
2051 |             "dist": {
2052 |                 "type": "zip",
2053 |                 "url": "https://files.phpcomposer.com/files/sebastianbergmann/php-timer/d107f347d368dd8a384601398280c7c608390ab7.zip",
2054 |                 "reference": "d107f347d368dd8a384601398280c7c608390ab7",
2055 |                 "shasum": ""
2056 |             },
2057 |             "require": {
2058 |                 "php": "^5.3.3 || ^7.0"
2059 |             },
2060 |             "require-dev": {
2061 |                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
2062 |             },
2063 |             "type": "library",
2064 |             "extra": {
2065 |                 "branch-alias": {
2066 |                     "dev-master": "1.0-dev"
2067 |                 }
2068 |             },
2069 |             "autoload": {
2070 |                 "classmap": [
2071 |                     "src/"
2072 |                 ]
2073 |             },
2074 |             "notification-url": "https://packagist.org/downloads/",
2075 |             "license": [
2076 |                 "BSD-3-Clause"
2077 |             ],
2078 |             "authors": [
2079 |                 {
2080 |                     "name": "Sebastian Bergmann",
2081 |                     "email": "sb@sebastian-bergmann.de",
2082 |                     "role": "lead"
2083 |                 }
2084 |             ],
2085 |             "description": "Utility class for timing",
2086 |             "homepage": "https://github.com/sebastianbergmann/php-timer/",
2087 |             "keywords": [
2088 |                 "timer"
2089 |             ],
2090 |             "time": "2017-03-07T15:42:04+00:00"
2091 |         },
2092 |         {
2093 |             "name": "phpunit/php-token-stream",
2094 |             "version": "dev-master",
2095 |             "source": {
2096 |                 "type": "git",
2097 |                 "url": "https://github.com/sebastianbergmann/php-token-stream.git",
2098 |                 "reference": "9a02332089ac48e704c70f6cefed30c224e3c0b0"
2099 |             },
2100 |             "dist": {
2101 |                 "type": "zip",
2102 |                 "url": "https://files.phpcomposer.com/files/sebastianbergmann/php-token-stream/9a02332089ac48e704c70f6cefed30c224e3c0b0.zip",
2103 |                 "reference": "9a02332089ac48e704c70f6cefed30c224e3c0b0",
2104 |                 "shasum": ""
2105 |             },
2106 |             "require": {
2107 |                 "ext-tokenizer": "*",
2108 |                 "php": "^7.0"
2109 |             },
2110 |             "require-dev": {
2111 |                 "phpunit/phpunit": "^6.2.4"
2112 |             },
2113 |             "type": "library",
2114 |             "extra": {
2115 |                 "branch-alias": {
2116 |                     "dev-master": "2.0-dev"
2117 |                 }
2118 |             },
2119 |             "autoload": {
2120 |                 "classmap": [
2121 |                     "src/"
2122 |                 ]
2123 |             },
2124 |             "notification-url": "https://packagist.org/downloads/",
2125 |             "license": [
2126 |                 "BSD-3-Clause"
2127 |             ],
2128 |             "authors": [
2129 |                 {
2130 |                     "name": "Sebastian Bergmann",
2131 |                     "email": "sebastian@phpunit.de"
2132 |                 }
2133 |             ],
2134 |             "description": "Wrapper around PHP's tokenizer extension.",
2135 |             "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
2136 |             "keywords": [
2137 |                 "tokenizer"
2138 |             ],
2139 |             "time": "2017-08-20T05:47:52+00:00"
2140 |         },
2141 |         {
2142 |             "name": "phpunit/phpunit",
2143 |             "version": "dev-master",
2144 |             "source": {
2145 |                 "type": "git",
2146 |                 "url": "https://github.com/sebastianbergmann/phpunit.git",
2147 |                 "reference": "e6e7085fbbd2e25f4ca128ac30c1b0d3dd4ef827"
2148 |             },
2149 |             "dist": {
2150 |                 "type": "zip",
2151 |                 "url": "https://files.phpcomposer.com/files/sebastianbergmann/phpunit/e6e7085fbbd2e25f4ca128ac30c1b0d3dd4ef827.zip",
2152 |                 "reference": "e6e7085fbbd2e25f4ca128ac30c1b0d3dd4ef827",
2153 |                 "shasum": ""
2154 |             },
2155 |             "require": {
2156 |                 "ext-dom": "*",
2157 |                 "ext-json": "*",
2158 |                 "ext-libxml": "*",
2159 |                 "ext-mbstring": "*",
2160 |                 "ext-xml": "*",
2161 |                 "myclabs/deep-copy": "^1.6.1",
2162 |                 "phar-io/manifest": "^1.0.1",
2163 |                 "phar-io/version": "^1.0",
2164 |                 "php": "^7.0",
2165 |                 "phpspec/prophecy": "^1.7",
2166 |                 "phpunit/php-code-coverage": "^5.2.2",
2167 |                 "phpunit/php-file-iterator": "^1.4.2",
2168 |                 "phpunit/php-text-template": "^1.2.1",
2169 |                 "phpunit/php-timer": "^1.0.9",
2170 |                 "phpunit/phpunit-mock-objects": "^4.0.3",
2171 |                 "sebastian/comparator": "^2.0.2",
2172 |                 "sebastian/diff": "^2.0",
2173 |                 "sebastian/environment": "^3.1",
2174 |                 "sebastian/exporter": "^3.1",
2175 |                 "sebastian/global-state": "^2.0",
2176 |                 "sebastian/object-enumerator": "^3.0.3",
2177 |                 "sebastian/resource-operations": "^1.0",
2178 |                 "sebastian/version": "^2.0.1"
2179 |             },
2180 |             "conflict": {
2181 |                 "phpdocumentor/reflection-docblock": "3.0.2",
2182 |                 "phpunit/dbunit": "<3.0"
2183 |             },
2184 |             "require-dev": {
2185 |                 "ext-pdo": "*"
2186 |             },
2187 |             "suggest": {
2188 |                 "ext-xdebug": "*",
2189 |                 "phpunit/php-invoker": "^1.1"
2190 |             },
2191 |             "bin": [
2192 |                 "phpunit"
2193 |             ],
2194 |             "type": "library",
2195 |             "extra": {
2196 |                 "branch-alias": {
2197 |                     "dev-master": "6.4.x-dev"
2198 |                 }
2199 |             },
2200 |             "autoload": {
2201 |                 "classmap": [
2202 |                     "src/"
2203 |                 ]
2204 |             },
2205 |             "notification-url": "https://packagist.org/downloads/",
2206 |             "license": [
2207 |                 "BSD-3-Clause"
2208 |             ],
2209 |             "authors": [
2210 |                 {
2211 |                     "name": "Sebastian Bergmann",
2212 |                     "email": "sebastian@phpunit.de",
2213 |                     "role": "lead"
2214 |                 }
2215 |             ],
2216 |             "description": "The PHP Unit Testing framework.",
2217 |             "homepage": "https://phpunit.de/",
2218 |             "keywords": [
2219 |                 "phpunit",
2220 |                 "testing",
2221 |                 "xunit"
2222 |             ],
2223 |             "time": "2017-09-01T08:39:38+00:00"
2224 |         },
2225 |         {
2226 |             "name": "phpunit/phpunit-mock-objects",
2227 |             "version": "dev-master",
2228 |             "source": {
2229 |                 "type": "git",
2230 |                 "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
2231 |                 "reference": "2f789b59ab89669015ad984afa350c4ec577ade0"
2232 |             },
2233 |             "dist": {
2234 |                 "type": "zip",
2235 |                 "url": "https://files.phpcomposer.com/files/sebastianbergmann/phpunit-mock-objects/2f789b59ab89669015ad984afa350c4ec577ade0.zip",
2236 |                 "reference": "2f789b59ab89669015ad984afa350c4ec577ade0",
2237 |                 "shasum": ""
2238 |             },
2239 |             "require": {
2240 |                 "doctrine/instantiator": "^1.0.5",
2241 |                 "php": "^7.0",
2242 |                 "phpunit/php-text-template": "^1.2.1",
2243 |                 "sebastian/exporter": "^3.0"
2244 |             },
2245 |             "conflict": {
2246 |                 "phpunit/phpunit": "<6.0"
2247 |             },
2248 |             "require-dev": {
2249 |                 "phpunit/phpunit": "^6.0"
2250 |             },
2251 |             "suggest": {
2252 |                 "ext-soap": "*"
2253 |             },
2254 |             "type": "library",
2255 |             "extra": {
2256 |                 "branch-alias": {
2257 |                     "dev-master": "4.0.x-dev"
2258 |                 }
2259 |             },
2260 |             "autoload": {
2261 |                 "classmap": [
2262 |                     "src/"
2263 |                 ]
2264 |             },
2265 |             "notification-url": "https://packagist.org/downloads/",
2266 |             "license": [
2267 |                 "BSD-3-Clause"
2268 |             ],
2269 |             "authors": [
2270 |                 {
2271 |                     "name": "Sebastian Bergmann",
2272 |                     "email": "sb@sebastian-bergmann.de",
2273 |                     "role": "lead"
2274 |                 }
2275 |             ],
2276 |             "description": "Mock Object library for PHPUnit",
2277 |             "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
2278 |             "keywords": [
2279 |                 "mock",
2280 |                 "xunit"
2281 |             ],
2282 |             "time": "2017-08-03T14:08:16+00:00"
2283 |         },
2284 |         {
2285 |             "name": "sebastian/code-unit-reverse-lookup",
2286 |             "version": "dev-master",
2287 |             "source": {
2288 |                 "type": "git",
2289 |                 "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
2290 |                 "reference": "3488be0a7b346cd6e5361510ed07e88f9bea2e88"
2291 |             },
2292 |             "dist": {
2293 |                 "type": "zip",
2294 |                 "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/3488be0a7b346cd6e5361510ed07e88f9bea2e88",
2295 |                 "reference": "3488be0a7b346cd6e5361510ed07e88f9bea2e88",
2296 |                 "shasum": ""
2297 |             },
2298 |             "require": {
2299 |                 "php": "^5.6 || ^7.0"
2300 |             },
2301 |             "require-dev": {
2302 |                 "phpunit/phpunit": "^5.7 || ^6.0"
2303 |             },
2304 |             "type": "library",
2305 |             "extra": {
2306 |                 "branch-alias": {
2307 |                     "dev-master": "1.0.x-dev"
2308 |                 }
2309 |             },
2310 |             "autoload": {
2311 |                 "classmap": [
2312 |                     "src/"
2313 |                 ]
2314 |             },
2315 |             "notification-url": "https://packagist.org/downloads/",
2316 |             "license": [
2317 |                 "BSD-3-Clause"
2318 |             ],
2319 |             "authors": [
2320 |                 {
2321 |                     "name": "Sebastian Bergmann",
2322 |                     "email": "sebastian@phpunit.de"
2323 |                 }
2324 |             ],
2325 |             "description": "Looks up which function or method a line of code belongs to",
2326 |             "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
2327 |             "time": "2017-03-04T10:23:55+00:00"
2328 |         },
2329 |         {
2330 |             "name": "sebastian/comparator",
2331 |             "version": "dev-master",
2332 |             "source": {
2333 |                 "type": "git",
2334 |                 "url": "https://github.com/sebastianbergmann/comparator.git",
2335 |                 "reference": "fb3213355da37bf91569ca7a944af19bc57b80e9"
2336 |             },
2337 |             "dist": {
2338 |                 "type": "zip",
2339 |                 "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fb3213355da37bf91569ca7a944af19bc57b80e9",
2340 |                 "reference": "fb3213355da37bf91569ca7a944af19bc57b80e9",
2341 |                 "shasum": ""
2342 |             },
2343 |             "require": {
2344 |                 "php": "^7.0",
2345 |                 "sebastian/diff": "^2.0",
2346 |                 "sebastian/exporter": "^3.0"
2347 |             },
2348 |             "require-dev": {
2349 |                 "phpunit/phpunit": "^6.0"
2350 |             },
2351 |             "type": "library",
2352 |             "extra": {
2353 |                 "branch-alias": {
2354 |                     "dev-master": "2.1.x-dev"
2355 |                 }
2356 |             },
2357 |             "autoload": {
2358 |                 "classmap": [
2359 |                     "src/"
2360 |                 ]
2361 |             },
2362 |             "notification-url": "https://packagist.org/downloads/",
2363 |             "license": [
2364 |                 "BSD-3-Clause"
2365 |             ],
2366 |             "authors": [
2367 |                 {
2368 |                     "name": "Jeff Welch",
2369 |                     "email": "whatthejeff@gmail.com"
2370 |                 },
2371 |                 {
2372 |                     "name": "Volker Dusch",
2373 |                     "email": "github@wallbash.com"
2374 |                 },
2375 |                 {
2376 |                     "name": "Bernhard Schussek",
2377 |                     "email": "bschussek@2bepublished.at"
2378 |                 },
2379 |                 {
2380 |                     "name": "Sebastian Bergmann",
2381 |                     "email": "sebastian@phpunit.de"
2382 |                 }
2383 |             ],
2384 |             "description": "Provides the functionality to compare PHP values for equality",
2385 |             "homepage": "https://github.com/sebastianbergmann/comparator",
2386 |             "keywords": [
2387 |                 "comparator",
2388 |                 "compare",
2389 |                 "equality"
2390 |             ],
2391 |             "time": "2017-08-20T14:03:32+00:00"
2392 |         },
2393 |         {
2394 |             "name": "sebastian/diff",
2395 |             "version": "dev-master",
2396 |             "source": {
2397 |                 "type": "git",
2398 |                 "url": "https://github.com/sebastianbergmann/diff.git",
2399 |                 "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd"
2400 |             },
2401 |             "dist": {
2402 |                 "type": "zip",
2403 |                 "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd",
2404 |                 "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd",
2405 |                 "shasum": ""
2406 |             },
2407 |             "require": {
2408 |                 "php": "^7.0"
2409 |             },
2410 |             "require-dev": {
2411 |                 "phpunit/phpunit": "^6.2"
2412 |             },
2413 |             "type": "library",
2414 |             "extra": {
2415 |                 "branch-alias": {
2416 |                     "dev-master": "2.0-dev"
2417 |                 }
2418 |             },
2419 |             "autoload": {
2420 |                 "classmap": [
2421 |                     "src/"
2422 |                 ]
2423 |             },
2424 |             "notification-url": "https://packagist.org/downloads/",
2425 |             "license": [
2426 |                 "BSD-3-Clause"
2427 |             ],
2428 |             "authors": [
2429 |                 {
2430 |                     "name": "Kore Nordmann",
2431 |                     "email": "mail@kore-nordmann.de"
2432 |                 },
2433 |                 {
2434 |                     "name": "Sebastian Bergmann",
2435 |                     "email": "sebastian@phpunit.de"
2436 |                 }
2437 |             ],
2438 |             "description": "Diff implementation",
2439 |             "homepage": "https://github.com/sebastianbergmann/diff",
2440 |             "keywords": [
2441 |                 "diff"
2442 |             ],
2443 |             "time": "2017-08-03T08:09:46+00:00"
2444 |         },
2445 |         {
2446 |             "name": "sebastian/environment",
2447 |             "version": "dev-master",
2448 |             "source": {
2449 |                 "type": "git",
2450 |                 "url": "https://github.com/sebastianbergmann/environment.git",
2451 |                 "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5"
2452 |             },
2453 |             "dist": {
2454 |                 "type": "zip",
2455 |                 "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5",
2456 |                 "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5",
2457 |                 "shasum": ""
2458 |             },
2459 |             "require": {
2460 |                 "php": "^7.0"
2461 |             },
2462 |             "require-dev": {
2463 |                 "phpunit/phpunit": "^6.1"
2464 |             },
2465 |             "type": "library",
2466 |             "extra": {
2467 |                 "branch-alias": {
2468 |                     "dev-master": "3.1.x-dev"
2469 |                 }
2470 |             },
2471 |             "autoload": {
2472 |                 "classmap": [
2473 |                     "src/"
2474 |                 ]
2475 |             },
2476 |             "notification-url": "https://packagist.org/downloads/",
2477 |             "license": [
2478 |                 "BSD-3-Clause"
2479 |             ],
2480 |             "authors": [
2481 |                 {
2482 |                     "name": "Sebastian Bergmann",
2483 |                     "email": "sebastian@phpunit.de"
2484 |                 }
2485 |             ],
2486 |             "description": "Provides functionality to handle HHVM/PHP environments",
2487 |             "homepage": "http://www.github.com/sebastianbergmann/environment",
2488 |             "keywords": [
2489 |                 "Xdebug",
2490 |                 "environment",
2491 |                 "hhvm"
2492 |             ],
2493 |             "time": "2017-07-01T08:51:00+00:00"
2494 |         },
2495 |         {
2496 |             "name": "sebastian/exporter",
2497 |             "version": "dev-master",
2498 |             "source": {
2499 |                 "type": "git",
2500 |                 "url": "https://github.com/sebastianbergmann/exporter.git",
2501 |                 "reference": "234199f4528de6d12aaa58b612e98f7d36adb937"
2502 |             },
2503 |             "dist": {
2504 |                 "type": "zip",
2505 |                 "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937",
2506 |                 "reference": "234199f4528de6d12aaa58b612e98f7d36adb937",
2507 |                 "shasum": ""
2508 |             },
2509 |             "require": {
2510 |                 "php": "^7.0",
2511 |                 "sebastian/recursion-context": "^3.0"
2512 |             },
2513 |             "require-dev": {
2514 |                 "ext-mbstring": "*",
2515 |                 "phpunit/phpunit": "^6.0"
2516 |             },
2517 |             "type": "library",
2518 |             "extra": {
2519 |                 "branch-alias": {
2520 |                     "dev-master": "3.1.x-dev"
2521 |                 }
2522 |             },
2523 |             "autoload": {
2524 |                 "classmap": [
2525 |                     "src/"
2526 |                 ]
2527 |             },
2528 |             "notification-url": "https://packagist.org/downloads/",
2529 |             "license": [
2530 |                 "BSD-3-Clause"
2531 |             ],
2532 |             "authors": [
2533 |                 {
2534 |                     "name": "Jeff Welch",
2535 |                     "email": "whatthejeff@gmail.com"
2536 |                 },
2537 |                 {
2538 |                     "name": "Volker Dusch",
2539 |                     "email": "github@wallbash.com"
2540 |                 },
2541 |                 {
2542 |                     "name": "Bernhard Schussek",
2543 |                     "email": "bschussek@2bepublished.at"
2544 |                 },
2545 |                 {
2546 |                     "name": "Sebastian Bergmann",
2547 |                     "email": "sebastian@phpunit.de"
2548 |                 },
2549 |                 {
2550 |                     "name": "Adam Harvey",
2551 |                     "email": "aharvey@php.net"
2552 |                 }
2553 |             ],
2554 |             "description": "Provides the functionality to export PHP variables for visualization",
2555 |             "homepage": "http://www.github.com/sebastianbergmann/exporter",
2556 |             "keywords": [
2557 |                 "export",
2558 |                 "exporter"
2559 |             ],
2560 |             "time": "2017-04-03T13:19:02+00:00"
2561 |         },
2562 |         {
2563 |             "name": "sebastian/global-state",
2564 |             "version": "dev-master",
2565 |             "source": {
2566 |                 "type": "git",
2567 |                 "url": "https://github.com/sebastianbergmann/global-state.git",
2568 |                 "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4"
2569 |             },
2570 |             "dist": {
2571 |                 "type": "zip",
2572 |                 "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
2573 |                 "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
2574 |                 "shasum": ""
2575 |             },
2576 |             "require": {
2577 |                 "php": "^7.0"
2578 |             },
2579 |             "require-dev": {
2580 |                 "phpunit/phpunit": "^6.0"
2581 |             },
2582 |             "suggest": {
2583 |                 "ext-uopz": "*"
2584 |             },
2585 |             "type": "library",
2586 |             "extra": {
2587 |                 "branch-alias": {
2588 |                     "dev-master": "2.0-dev"
2589 |                 }
2590 |             },
2591 |             "autoload": {
2592 |                 "classmap": [
2593 |                     "src/"
2594 |                 ]
2595 |             },
2596 |             "notification-url": "https://packagist.org/downloads/",
2597 |             "license": [
2598 |                 "BSD-3-Clause"
2599 |             ],
2600 |             "authors": [
2601 |                 {
2602 |                     "name": "Sebastian Bergmann",
2603 |                     "email": "sebastian@phpunit.de"
2604 |                 }
2605 |             ],
2606 |             "description": "Snapshotting of global state",
2607 |             "homepage": "http://www.github.com/sebastianbergmann/global-state",
2608 |             "keywords": [
2609 |                 "global state"
2610 |             ],
2611 |             "time": "2017-04-27T15:39:26+00:00"
2612 |         },
2613 |         {
2614 |             "name": "sebastian/object-enumerator",
2615 |             "version": "dev-master",
2616 |             "source": {
2617 |                 "type": "git",
2618 |                 "url": "https://github.com/sebastianbergmann/object-enumerator.git",
2619 |                 "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5"
2620 |             },
2621 |             "dist": {
2622 |                 "type": "zip",
2623 |                 "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5",
2624 |                 "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5",
2625 |                 "shasum": ""
2626 |             },
2627 |             "require": {
2628 |                 "php": "^7.0",
2629 |                 "sebastian/object-reflector": "^1.1.1",
2630 |                 "sebastian/recursion-context": "^3.0"
2631 |             },
2632 |             "require-dev": {
2633 |                 "phpunit/phpunit": "^6.0"
2634 |             },
2635 |             "type": "library",
2636 |             "extra": {
2637 |                 "branch-alias": {
2638 |                     "dev-master": "3.0.x-dev"
2639 |                 }
2640 |             },
2641 |             "autoload": {
2642 |                 "classmap": [
2643 |                     "src/"
2644 |                 ]
2645 |             },
2646 |             "notification-url": "https://packagist.org/downloads/",
2647 |             "license": [
2648 |                 "BSD-3-Clause"
2649 |             ],
2650 |             "authors": [
2651 |                 {
2652 |                     "name": "Sebastian Bergmann",
2653 |                     "email": "sebastian@phpunit.de"
2654 |                 }
2655 |             ],
2656 |             "description": "Traverses array structures and object graphs to enumerate all referenced objects",
2657 |             "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
2658 |             "time": "2017-08-03T12:35:26+00:00"
2659 |         },
2660 |         {
2661 |             "name": "sebastian/object-reflector",
2662 |             "version": "dev-master",
2663 |             "source": {
2664 |                 "type": "git",
2665 |                 "url": "https://github.com/sebastianbergmann/object-reflector.git",
2666 |                 "reference": "773f97c67f28de00d397be301821b06708fca0be"
2667 |             },
2668 |             "dist": {
2669 |                 "type": "zip",
2670 |                 "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be",
2671 |                 "reference": "773f97c67f28de00d397be301821b06708fca0be",
2672 |                 "shasum": ""
2673 |             },
2674 |             "require": {
2675 |                 "php": "^7.0"
2676 |             },
2677 |             "require-dev": {
2678 |                 "phpunit/phpunit": "^6.0"
2679 |             },
2680 |             "type": "library",
2681 |             "extra": {
2682 |                 "branch-alias": {
2683 |                     "dev-master": "1.1-dev"
2684 |                 }
2685 |             },
2686 |             "autoload": {
2687 |                 "classmap": [
2688 |                     "src/"
2689 |                 ]
2690 |             },
2691 |             "notification-url": "https://packagist.org/downloads/",
2692 |             "license": [
2693 |                 "BSD-3-Clause"
2694 |             ],
2695 |             "authors": [
2696 |                 {
2697 |                     "name": "Sebastian Bergmann",
2698 |                     "email": "sebastian@phpunit.de"
2699 |                 }
2700 |             ],
2701 |             "description": "Allows reflection of object attributes, including inherited and non-public ones",
2702 |             "homepage": "https://github.com/sebastianbergmann/object-reflector/",
2703 |             "time": "2017-03-29T09:07:27+00:00"
2704 |         },
2705 |         {
2706 |             "name": "sebastian/recursion-context",
2707 |             "version": "dev-master",
2708 |             "source": {
2709 |                 "type": "git",
2710 |                 "url": "https://github.com/sebastianbergmann/recursion-context.git",
2711 |                 "reference": "a0e54bc9bf04e2c5b302236984cebc277631f0f1"
2712 |             },
2713 |             "dist": {
2714 |                 "type": "zip",
2715 |                 "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/a0e54bc9bf04e2c5b302236984cebc277631f0f1",
2716 |                 "reference": "a0e54bc9bf04e2c5b302236984cebc277631f0f1",
2717 |                 "shasum": ""
2718 |             },
2719 |             "require": {
2720 |                 "php": "^7.0"
2721 |             },
2722 |             "require-dev": {
2723 |                 "phpunit/phpunit": "^6.0"
2724 |             },
2725 |             "type": "library",
2726 |             "extra": {
2727 |                 "branch-alias": {
2728 |                     "dev-master": "3.0.x-dev"
2729 |                 }
2730 |             },
2731 |             "autoload": {
2732 |                 "classmap": [
2733 |                     "src/"
2734 |                 ]
2735 |             },
2736 |             "notification-url": "https://packagist.org/downloads/",
2737 |             "license": [
2738 |                 "BSD-3-Clause"
2739 |             ],
2740 |             "authors": [
2741 |                 {
2742 |                     "name": "Jeff Welch",
2743 |                     "email": "whatthejeff@gmail.com"
2744 |                 },
2745 |                 {
2746 |                     "name": "Sebastian Bergmann",
2747 |                     "email": "sebastian@phpunit.de"
2748 |                 },
2749 |                 {
2750 |                     "name": "Adam Harvey",
2751 |                     "email": "aharvey@php.net"
2752 |                 }
2753 |             ],
2754 |             "description": "Provides functionality to recursively process PHP variables",
2755 |             "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
2756 |             "time": "2017-03-07T15:09:59+00:00"
2757 |         },
2758 |         {
2759 |             "name": "sebastian/resource-operations",
2760 |             "version": "dev-master",
2761 |             "source": {
2762 |                 "type": "git",
2763 |                 "url": "https://github.com/sebastianbergmann/resource-operations.git",
2764 |                 "reference": "fadc83f7c41fb2924e542635fea47ae546816ece"
2765 |             },
2766 |             "dist": {
2767 |                 "type": "zip",
2768 |                 "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/fadc83f7c41fb2924e542635fea47ae546816ece",
2769 |                 "reference": "fadc83f7c41fb2924e542635fea47ae546816ece",
2770 |                 "shasum": ""
2771 |             },
2772 |             "require": {
2773 |                 "php": ">=5.6.0"
2774 |             },
2775 |             "type": "library",
2776 |             "extra": {
2777 |                 "branch-alias": {
2778 |                     "dev-master": "1.0.x-dev"
2779 |                 }
2780 |             },
2781 |             "autoload": {
2782 |                 "classmap": [
2783 |                     "src/"
2784 |                 ]
2785 |             },
2786 |             "notification-url": "https://packagist.org/downloads/",
2787 |             "license": [
2788 |                 "BSD-3-Clause"
2789 |             ],
2790 |             "authors": [
2791 |                 {
2792 |                     "name": "Sebastian Bergmann",
2793 |                     "email": "sebastian@phpunit.de"
2794 |                 }
2795 |             ],
2796 |             "description": "Provides a list of PHP built-in functions that operate on resources",
2797 |             "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
2798 |             "time": "2016-10-03T07:43:09+00:00"
2799 |         },
2800 |         {
2801 |             "name": "sebastian/version",
2802 |             "version": "dev-master",
2803 |             "source": {
2804 |                 "type": "git",
2805 |                 "url": "https://github.com/sebastianbergmann/version.git",
2806 |                 "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
2807 |             },
2808 |             "dist": {
2809 |                 "type": "zip",
2810 |                 "url": "https://files.phpcomposer.com/files/sebastianbergmann/version/99732be0ddb3361e16ad77b68ba41efc8e979019.zip",
2811 |                 "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
2812 |                 "shasum": ""
2813 |             },
2814 |             "require": {
2815 |                 "php": ">=5.6"
2816 |             },
2817 |             "type": "library",
2818 |             "extra": {
2819 |                 "branch-alias": {
2820 |                     "dev-master": "2.0.x-dev"
2821 |                 }
2822 |             },
2823 |             "autoload": {
2824 |                 "classmap": [
2825 |                     "src/"
2826 |                 ]
2827 |             },
2828 |             "notification-url": "https://packagist.org/downloads/",
2829 |             "license": [
2830 |                 "BSD-3-Clause"
2831 |             ],
2832 |             "authors": [
2833 |                 {
2834 |                     "name": "Sebastian Bergmann",
2835 |                     "email": "sebastian@phpunit.de",
2836 |                     "role": "lead"
2837 |                 }
2838 |             ],
2839 |             "description": "Library that helps with managing the version number of Git-hosted PHP projects",
2840 |             "homepage": "https://github.com/sebastianbergmann/version",
2841 |             "time": "2016-10-03T07:35:21+00:00"
2842 |         },
2843 |         {
2844 |             "name": "theseer/tokenizer",
2845 |             "version": "1.1.0",
2846 |             "source": {
2847 |                 "type": "git",
2848 |                 "url": "https://github.com/theseer/tokenizer.git",
2849 |                 "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b"
2850 |             },
2851 |             "dist": {
2852 |                 "type": "zip",
2853 |                 "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b",
2854 |                 "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b",
2855 |                 "shasum": ""
2856 |             },
2857 |             "require": {
2858 |                 "ext-dom": "*",
2859 |                 "ext-tokenizer": "*",
2860 |                 "ext-xmlwriter": "*",
2861 |                 "php": "^7.0"
2862 |             },
2863 |             "type": "library",
2864 |             "autoload": {
2865 |                 "classmap": [
2866 |                     "src/"
2867 |                 ]
2868 |             },
2869 |             "notification-url": "https://packagist.org/downloads/",
2870 |             "license": [
2871 |                 "BSD-3-Clause"
2872 |             ],
2873 |             "authors": [
2874 |                 {
2875 |                     "name": "Arne Blankerts",
2876 |                     "email": "arne@blankerts.de",
2877 |                     "role": "Developer"
2878 |                 }
2879 |             ],
2880 |             "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
2881 |             "time": "2017-04-07T12:08:54+00:00"
2882 |         },
2883 |         {
2884 |             "name": "webmozart/assert",
2885 |             "version": "dev-master",
2886 |             "source": {
2887 |                 "type": "git",
2888 |                 "url": "https://github.com/webmozart/assert.git",
2889 |                 "reference": "4a8bf11547e139e77b651365113fc12850c43d9a"
2890 |             },
2891 |             "dist": {
2892 |                 "type": "zip",
2893 |                 "url": "https://api.github.com/repos/webmozart/assert/zipball/4a8bf11547e139e77b651365113fc12850c43d9a",
2894 |                 "reference": "4a8bf11547e139e77b651365113fc12850c43d9a",
2895 |                 "shasum": ""
2896 |             },
2897 |             "require": {
2898 |                 "php": "^5.3.3 || ^7.0"
2899 |             },
2900 |             "require-dev": {
2901 |                 "phpunit/phpunit": "^4.6",
2902 |                 "sebastian/version": "^1.0.1"
2903 |             },
2904 |             "type": "library",
2905 |             "extra": {
2906 |                 "branch-alias": {
2907 |                     "dev-master": "1.3-dev"
2908 |                 }
2909 |             },
2910 |             "autoload": {
2911 |                 "psr-4": {
2912 |                     "Webmozart\\Assert\\": "src/"
2913 |                 }
2914 |             },
2915 |             "notification-url": "https://packagist.org/downloads/",
2916 |             "license": [
2917 |                 "MIT"
2918 |             ],
2919 |             "authors": [
2920 |                 {
2921 |                     "name": "Bernhard Schussek",
2922 |                     "email": "bschussek@gmail.com"
2923 |                 }
2924 |             ],
2925 |             "description": "Assertions to validate method input/output with nice error messages.",
2926 |             "keywords": [
2927 |                 "assert",
2928 |                 "check",
2929 |                 "validate"
2930 |             ],
2931 |             "time": "2016-11-23T20:04:41+00:00"
2932 |         }
2933 |     ],
2934 |     "aliases": [],
2935 |     "minimum-stability": "dev",
2936 |     "stability-flags": {
2937 |         "twig/twig": 20,
2938 |         "phpcasts/yaf-library": 20
2939 |     },
2940 |     "prefer-stable": false,
2941 |     "prefer-lowest": false,
2942 |     "platform": {
2943 |         "php": ">=7.0.0",
2944 |         "ext-yaf": "*"
2945 |     },
2946 |     "platform-dev": []
2947 | }
2948 | 


--------------------------------------------------------------------------------