├── .env.example ├── .gitignore ├── .travis.yml ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── bootstrap.php ├── composer.json ├── composer.lock ├── migrations └── 20180423125618_create_books_table.php ├── phinx.php ├── phpunit.xml ├── public ├── .htaccess └── index.php ├── src ├── Controllers │ ├── AbstractController.php │ └── BooksController.php ├── Models │ └── Book.php ├── config.php └── routes.php ├── templates └── docs.phtml └── tests ├── ExampleTest.php └── TestCase.php /.env.example: -------------------------------------------------------------------------------- 1 | APP_NAME=kapi 2 | APP_ENV=local 3 | 4 | DB_DRIVER=mysql 5 | DB_HOST=localhost 6 | DB_DATABASE= 7 | DB_USERNAME= 8 | DB_PASSWORD= 9 | DB_PORT=3306 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor/ 2 | /logs/* 3 | !/logs/README.md 4 | .idea 5 | .env 6 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | dist: trusty 3 | sudo: false 4 | 5 | php: 6 | - 7.0 7 | - 7.1 8 | - 7.2 9 | 10 | before_install: 11 | - mv ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/xdebug.ini{,.disabled} || echo "xdebug not available" 12 | - composer self-update 13 | 14 | install: travis_retry composer update --no-interaction --prefer-dist 15 | 16 | script: 17 | - vendor/bin/phpunit 18 | 19 | cache: 20 | directories: 21 | - $HOME/.composer/cache 22 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # How to Contribute 2 | 3 | ## Pull Requests 4 | 5 | 1. Fork the repository 6 | 2. Create a new branch for each feature or improvement 7 | 3. Send a pull request from each feature branch to the **develop** branch 8 | 9 | It is very important to separate new features or improvements into separate feature branches, and to send a pull request for each branch. This allows us to review and pull in new features or improvements individually. 10 | 11 | ## Style Guide 12 | 13 | All pull requests must adhere to the [PSR-2 standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md). 14 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 Emir Karsiyakali 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 13 | all 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 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # KAPI: Doors for PHP - v1.0.0 2 | 3 | [![Build Status](https://travis-ci.org/emir/kapi.svg?branch=master)](https://travis-ci.org/emir/kapi) 4 | 5 | Slim Framework based simple helper to generate RESTful API's and applications, requires PHP 7. 6 | 7 | KAPI means "door" in Turkish. 8 | 9 | ## Creating a Project skeleton 10 | 11 | git clone https://github.com/emir/kapi myproject 12 | cd myproject 13 | composer install 14 | 15 | It will create an example project. 16 | 17 | ## Edit Configuration 18 | 19 | $EDITOR .env 20 | 21 | ## Migrations 22 | 23 | phinx migrate 24 | 25 | ## Running the Project 26 | 27 | cd myproject 28 | php -S localhost:8080 -t public 29 | 30 | That's all! :) 31 | 32 | ## Getting Started 33 | 34 | You should define your URLs in *routes.php*: 35 | 36 | ```php 37 | # src/routes.php 38 | withJson($books); 90 | } 91 | } 92 | ``` 93 | 94 | Done! 95 | -------------------------------------------------------------------------------- /bootstrap.php: -------------------------------------------------------------------------------- 1 | load(); 7 | 8 | $settings['settings'] = require __DIR__ . '/src/config.php'; 9 | 10 | // Instantiate the app 11 | $app = new \Slim\App($settings); 12 | 13 | // DIC configuration 14 | $container = $app->getContainer(); 15 | 16 | // View renderer 17 | $container['view'] = function ($c) { 18 | $settings = $c->get('settings')['renderer']; 19 | return new Slim\Views\PhpRenderer($settings['template_path']); 20 | }; 21 | 22 | // Monolog 23 | $container['logger'] = function ($c) { 24 | $settings = $c->get('settings')['logger']; 25 | $logger = new Monolog\Logger($settings['name']); 26 | $logger->pushProcessor(new Monolog\Processor\UidProcessor()); 27 | $logger->pushHandler(new Monolog\Handler\StreamHandler($settings['path'], $settings['level'])); 28 | return $logger; 29 | }; 30 | 31 | // Eloquent 32 | $capsule = new \Illuminate\Database\Capsule\Manager; 33 | $capsule->addConnection($settings['settings']['db']); 34 | $capsule->bootEloquent(); 35 | $capsule->setAsGlobal(); 36 | 37 | // Routes 38 | $urls = require __DIR__ . '/src/routes.php'; 39 | 40 | foreach ($urls as $url) { 41 | $app->{ $url['0'] }($url[1], '\App\Controllers\\' . $url[2]); 42 | } 43 | 44 | // Documentation 45 | $app->get('/docs', function ($request, $response, $args) use ($urls) { 46 | return $this->view->render($response, 'docs.phtml', [ 47 | 'urls' => $urls, 48 | ]); 49 | }); 50 | 51 | $app->run(); 52 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "emir/kapi", 3 | "description": "Slim Framework based API skeleton application for rapid development", 4 | "keywords": ["microframework", "rest", "api"], 5 | "homepage": "http://github.com/emir/kapi", 6 | "license": "MIT", 7 | "type": "project", 8 | "authors": [ 9 | { 10 | "name": "Emir Karşıyakalı", 11 | "email": "emirkarsiyakali@gmail.com", 12 | "homepage": "https://emirkarsiyakali.com" 13 | }, 14 | { 15 | "name": "Fatih Kadir Akin", 16 | "email": "fka@fatihak.in", 17 | "homepage": "http://fatihak.in" 18 | } 19 | ], 20 | "require": { 21 | "php": ">=7.0", 22 | "slim/slim": "^3.1", 23 | "slim/php-view": "^2.0", 24 | "monolog/monolog": "^1.17", 25 | "illuminate/database": "^5.5", 26 | "vlucas/phpdotenv": "^2.4", 27 | "robmorgan/phinx": "^0.9.2" 28 | }, 29 | "require-dev": { 30 | "phpunit/phpunit": ">=4.8 < 6.0" 31 | }, 32 | "autoload": { 33 | "psr-4": { 34 | "App\\": "src/" 35 | } 36 | }, 37 | "autoload-dev": { 38 | "psr-4": { 39 | "Tests\\": "tests/" 40 | } 41 | }, 42 | "config": { 43 | "process-timeout" : 0 44 | }, 45 | "scripts": { 46 | "post-root-package-install": [ 47 | "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" 48 | ], 49 | "start": "php -S localhost:8080 -t public", 50 | "test": "phpunit" 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /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#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "65641e49df1ad08980377c1385ce1227", 8 | "packages": [ 9 | { 10 | "name": "container-interop/container-interop", 11 | "version": "1.2.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/container-interop/container-interop.git", 15 | "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", 20 | "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "psr/container": "^1.0" 25 | }, 26 | "type": "library", 27 | "autoload": { 28 | "psr-4": { 29 | "Interop\\Container\\": "src/Interop/Container/" 30 | } 31 | }, 32 | "notification-url": "https://packagist.org/downloads/", 33 | "license": [ 34 | "MIT" 35 | ], 36 | "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", 37 | "homepage": "https://github.com/container-interop/container-interop", 38 | "time": "2017-02-14T19:40:03+00:00" 39 | }, 40 | { 41 | "name": "doctrine/inflector", 42 | "version": "v1.3.0", 43 | "source": { 44 | "type": "git", 45 | "url": "https://github.com/doctrine/inflector.git", 46 | "reference": "5527a48b7313d15261292c149e55e26eae771b0a" 47 | }, 48 | "dist": { 49 | "type": "zip", 50 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", 51 | "reference": "5527a48b7313d15261292c149e55e26eae771b0a", 52 | "shasum": "" 53 | }, 54 | "require": { 55 | "php": "^7.1" 56 | }, 57 | "require-dev": { 58 | "phpunit/phpunit": "^6.2" 59 | }, 60 | "type": "library", 61 | "extra": { 62 | "branch-alias": { 63 | "dev-master": "1.3.x-dev" 64 | } 65 | }, 66 | "autoload": { 67 | "psr-4": { 68 | "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" 69 | } 70 | }, 71 | "notification-url": "https://packagist.org/downloads/", 72 | "license": [ 73 | "MIT" 74 | ], 75 | "authors": [ 76 | { 77 | "name": "Roman Borschel", 78 | "email": "roman@code-factory.org" 79 | }, 80 | { 81 | "name": "Benjamin Eberlei", 82 | "email": "kontakt@beberlei.de" 83 | }, 84 | { 85 | "name": "Guilherme Blanco", 86 | "email": "guilhermeblanco@gmail.com" 87 | }, 88 | { 89 | "name": "Jonathan Wage", 90 | "email": "jonwage@gmail.com" 91 | }, 92 | { 93 | "name": "Johannes Schmitt", 94 | "email": "schmittjoh@gmail.com" 95 | } 96 | ], 97 | "description": "Common String Manipulations with regard to casing and singular/plural rules.", 98 | "homepage": "http://www.doctrine-project.org", 99 | "keywords": [ 100 | "inflection", 101 | "pluralize", 102 | "singularize", 103 | "string" 104 | ], 105 | "time": "2018-01-09T20:05:19+00:00" 106 | }, 107 | { 108 | "name": "illuminate/container", 109 | "version": "v5.6.17", 110 | "source": { 111 | "type": "git", 112 | "url": "https://github.com/illuminate/container.git", 113 | "reference": "4a42d667a05ec6d31f05b532cdac7e8e68e5ea2a" 114 | }, 115 | "dist": { 116 | "type": "zip", 117 | "url": "https://api.github.com/repos/illuminate/container/zipball/4a42d667a05ec6d31f05b532cdac7e8e68e5ea2a", 118 | "reference": "4a42d667a05ec6d31f05b532cdac7e8e68e5ea2a", 119 | "shasum": "" 120 | }, 121 | "require": { 122 | "illuminate/contracts": "5.6.*", 123 | "php": "^7.1.3", 124 | "psr/container": "~1.0" 125 | }, 126 | "type": "library", 127 | "extra": { 128 | "branch-alias": { 129 | "dev-master": "5.6-dev" 130 | } 131 | }, 132 | "autoload": { 133 | "psr-4": { 134 | "Illuminate\\Container\\": "" 135 | } 136 | }, 137 | "notification-url": "https://packagist.org/downloads/", 138 | "license": [ 139 | "MIT" 140 | ], 141 | "authors": [ 142 | { 143 | "name": "Taylor Otwell", 144 | "email": "taylor@laravel.com" 145 | } 146 | ], 147 | "description": "The Illuminate Container package.", 148 | "homepage": "https://laravel.com", 149 | "time": "2018-01-21T02:13:38+00:00" 150 | }, 151 | { 152 | "name": "illuminate/contracts", 153 | "version": "v5.6.17", 154 | "source": { 155 | "type": "git", 156 | "url": "https://github.com/illuminate/contracts.git", 157 | "reference": "322ec80498b3bf85bc4025d028e130a9b50242b9" 158 | }, 159 | "dist": { 160 | "type": "zip", 161 | "url": "https://api.github.com/repos/illuminate/contracts/zipball/322ec80498b3bf85bc4025d028e130a9b50242b9", 162 | "reference": "322ec80498b3bf85bc4025d028e130a9b50242b9", 163 | "shasum": "" 164 | }, 165 | "require": { 166 | "php": "^7.1.3", 167 | "psr/container": "~1.0", 168 | "psr/simple-cache": "~1.0" 169 | }, 170 | "type": "library", 171 | "extra": { 172 | "branch-alias": { 173 | "dev-master": "5.6-dev" 174 | } 175 | }, 176 | "autoload": { 177 | "psr-4": { 178 | "Illuminate\\Contracts\\": "" 179 | } 180 | }, 181 | "notification-url": "https://packagist.org/downloads/", 182 | "license": [ 183 | "MIT" 184 | ], 185 | "authors": [ 186 | { 187 | "name": "Taylor Otwell", 188 | "email": "taylor@laravel.com" 189 | } 190 | ], 191 | "description": "The Illuminate Contracts package.", 192 | "homepage": "https://laravel.com", 193 | "time": "2018-04-07T17:05:26+00:00" 194 | }, 195 | { 196 | "name": "illuminate/database", 197 | "version": "v5.6.17", 198 | "source": { 199 | "type": "git", 200 | "url": "https://github.com/illuminate/database.git", 201 | "reference": "a949e082dbb520fdcb2798e0a5408669724aa197" 202 | }, 203 | "dist": { 204 | "type": "zip", 205 | "url": "https://api.github.com/repos/illuminate/database/zipball/a949e082dbb520fdcb2798e0a5408669724aa197", 206 | "reference": "a949e082dbb520fdcb2798e0a5408669724aa197", 207 | "shasum": "" 208 | }, 209 | "require": { 210 | "illuminate/container": "5.6.*", 211 | "illuminate/contracts": "5.6.*", 212 | "illuminate/support": "5.6.*", 213 | "php": "^7.1.3" 214 | }, 215 | "suggest": { 216 | "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.6).", 217 | "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", 218 | "illuminate/console": "Required to use the database commands (5.6.*).", 219 | "illuminate/events": "Required to use the observers with Eloquent (5.6.*).", 220 | "illuminate/filesystem": "Required to use the migrations (5.6.*).", 221 | "illuminate/pagination": "Required to paginate the result set (5.6.*)." 222 | }, 223 | "type": "library", 224 | "extra": { 225 | "branch-alias": { 226 | "dev-master": "5.6-dev" 227 | } 228 | }, 229 | "autoload": { 230 | "psr-4": { 231 | "Illuminate\\Database\\": "" 232 | } 233 | }, 234 | "notification-url": "https://packagist.org/downloads/", 235 | "license": [ 236 | "MIT" 237 | ], 238 | "authors": [ 239 | { 240 | "name": "Taylor Otwell", 241 | "email": "taylor@laravel.com" 242 | } 243 | ], 244 | "description": "The Illuminate Database package.", 245 | "homepage": "https://laravel.com", 246 | "keywords": [ 247 | "database", 248 | "laravel", 249 | "orm", 250 | "sql" 251 | ], 252 | "time": "2018-04-17T12:36:27+00:00" 253 | }, 254 | { 255 | "name": "illuminate/support", 256 | "version": "v5.6.17", 257 | "source": { 258 | "type": "git", 259 | "url": "https://github.com/illuminate/support.git", 260 | "reference": "cc8d6f5cef3a901de6bb7d1b362102a6db001085" 261 | }, 262 | "dist": { 263 | "type": "zip", 264 | "url": "https://api.github.com/repos/illuminate/support/zipball/cc8d6f5cef3a901de6bb7d1b362102a6db001085", 265 | "reference": "cc8d6f5cef3a901de6bb7d1b362102a6db001085", 266 | "shasum": "" 267 | }, 268 | "require": { 269 | "doctrine/inflector": "~1.1", 270 | "ext-mbstring": "*", 271 | "illuminate/contracts": "5.6.*", 272 | "nesbot/carbon": "^1.24.1", 273 | "php": "^7.1.3" 274 | }, 275 | "conflict": { 276 | "tightenco/collect": "<5.5.33" 277 | }, 278 | "suggest": { 279 | "illuminate/filesystem": "Required to use the composer class (5.6.*).", 280 | "symfony/process": "Required to use the composer class (~4.0).", 281 | "symfony/var-dumper": "Required to use the dd function (~4.0)." 282 | }, 283 | "type": "library", 284 | "extra": { 285 | "branch-alias": { 286 | "dev-master": "5.6-dev" 287 | } 288 | }, 289 | "autoload": { 290 | "psr-4": { 291 | "Illuminate\\Support\\": "" 292 | }, 293 | "files": [ 294 | "helpers.php" 295 | ] 296 | }, 297 | "notification-url": "https://packagist.org/downloads/", 298 | "license": [ 299 | "MIT" 300 | ], 301 | "authors": [ 302 | { 303 | "name": "Taylor Otwell", 304 | "email": "taylor@laravel.com" 305 | } 306 | ], 307 | "description": "The Illuminate Support package.", 308 | "homepage": "https://laravel.com", 309 | "time": "2018-04-17T12:26:47+00:00" 310 | }, 311 | { 312 | "name": "monolog/monolog", 313 | "version": "1.23.0", 314 | "source": { 315 | "type": "git", 316 | "url": "https://github.com/Seldaek/monolog.git", 317 | "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" 318 | }, 319 | "dist": { 320 | "type": "zip", 321 | "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", 322 | "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", 323 | "shasum": "" 324 | }, 325 | "require": { 326 | "php": ">=5.3.0", 327 | "psr/log": "~1.0" 328 | }, 329 | "provide": { 330 | "psr/log-implementation": "1.0.0" 331 | }, 332 | "require-dev": { 333 | "aws/aws-sdk-php": "^2.4.9 || ^3.0", 334 | "doctrine/couchdb": "~1.0@dev", 335 | "graylog2/gelf-php": "~1.0", 336 | "jakub-onderka/php-parallel-lint": "0.9", 337 | "php-amqplib/php-amqplib": "~2.4", 338 | "php-console/php-console": "^3.1.3", 339 | "phpunit/phpunit": "~4.5", 340 | "phpunit/phpunit-mock-objects": "2.3.0", 341 | "ruflin/elastica": ">=0.90 <3.0", 342 | "sentry/sentry": "^0.13", 343 | "swiftmailer/swiftmailer": "^5.3|^6.0" 344 | }, 345 | "suggest": { 346 | "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", 347 | "doctrine/couchdb": "Allow sending log messages to a CouchDB server", 348 | "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", 349 | "ext-mongo": "Allow sending log messages to a MongoDB server", 350 | "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", 351 | "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", 352 | "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", 353 | "php-console/php-console": "Allow sending log messages to Google Chrome", 354 | "rollbar/rollbar": "Allow sending log messages to Rollbar", 355 | "ruflin/elastica": "Allow sending log messages to an Elastic Search server", 356 | "sentry/sentry": "Allow sending log messages to a Sentry server" 357 | }, 358 | "type": "library", 359 | "extra": { 360 | "branch-alias": { 361 | "dev-master": "2.0.x-dev" 362 | } 363 | }, 364 | "autoload": { 365 | "psr-4": { 366 | "Monolog\\": "src/Monolog" 367 | } 368 | }, 369 | "notification-url": "https://packagist.org/downloads/", 370 | "license": [ 371 | "MIT" 372 | ], 373 | "authors": [ 374 | { 375 | "name": "Jordi Boggiano", 376 | "email": "j.boggiano@seld.be", 377 | "homepage": "http://seld.be" 378 | } 379 | ], 380 | "description": "Sends your logs to files, sockets, inboxes, databases and various web services", 381 | "homepage": "http://github.com/Seldaek/monolog", 382 | "keywords": [ 383 | "log", 384 | "logging", 385 | "psr-3" 386 | ], 387 | "time": "2017-06-19T01:22:40+00:00" 388 | }, 389 | { 390 | "name": "nesbot/carbon", 391 | "version": "1.27.0", 392 | "source": { 393 | "type": "git", 394 | "url": "https://github.com/briannesbitt/Carbon.git", 395 | "reference": "ef81c39b67200dcd7401c24363dcac05ac3a4fe9" 396 | }, 397 | "dist": { 398 | "type": "zip", 399 | "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ef81c39b67200dcd7401c24363dcac05ac3a4fe9", 400 | "reference": "ef81c39b67200dcd7401c24363dcac05ac3a4fe9", 401 | "shasum": "" 402 | }, 403 | "require": { 404 | "php": ">=5.3.9", 405 | "symfony/translation": "~2.6 || ~3.0 || ~4.0" 406 | }, 407 | "require-dev": { 408 | "friendsofphp/php-cs-fixer": "~2", 409 | "phpunit/phpunit": "^4.8.35 || ^5.7" 410 | }, 411 | "type": "library", 412 | "autoload": { 413 | "psr-4": { 414 | "": "src/" 415 | } 416 | }, 417 | "notification-url": "https://packagist.org/downloads/", 418 | "license": [ 419 | "MIT" 420 | ], 421 | "authors": [ 422 | { 423 | "name": "Brian Nesbitt", 424 | "email": "brian@nesbot.com", 425 | "homepage": "http://nesbot.com" 426 | } 427 | ], 428 | "description": "A simple API extension for DateTime.", 429 | "homepage": "http://carbon.nesbot.com", 430 | "keywords": [ 431 | "date", 432 | "datetime", 433 | "time" 434 | ], 435 | "time": "2018-04-23T09:02:57+00:00" 436 | }, 437 | { 438 | "name": "nikic/fast-route", 439 | "version": "v1.3.0", 440 | "source": { 441 | "type": "git", 442 | "url": "https://github.com/nikic/FastRoute.git", 443 | "reference": "181d480e08d9476e61381e04a71b34dc0432e812" 444 | }, 445 | "dist": { 446 | "type": "zip", 447 | "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812", 448 | "reference": "181d480e08d9476e61381e04a71b34dc0432e812", 449 | "shasum": "" 450 | }, 451 | "require": { 452 | "php": ">=5.4.0" 453 | }, 454 | "require-dev": { 455 | "phpunit/phpunit": "^4.8.35|~5.7" 456 | }, 457 | "type": "library", 458 | "autoload": { 459 | "psr-4": { 460 | "FastRoute\\": "src/" 461 | }, 462 | "files": [ 463 | "src/functions.php" 464 | ] 465 | }, 466 | "notification-url": "https://packagist.org/downloads/", 467 | "license": [ 468 | "BSD-3-Clause" 469 | ], 470 | "authors": [ 471 | { 472 | "name": "Nikita Popov", 473 | "email": "nikic@php.net" 474 | } 475 | ], 476 | "description": "Fast request router for PHP", 477 | "keywords": [ 478 | "router", 479 | "routing" 480 | ], 481 | "time": "2018-02-13T20:26:39+00:00" 482 | }, 483 | { 484 | "name": "pimple/pimple", 485 | "version": "v3.2.3", 486 | "source": { 487 | "type": "git", 488 | "url": "https://github.com/silexphp/Pimple.git", 489 | "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32" 490 | }, 491 | "dist": { 492 | "type": "zip", 493 | "url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32", 494 | "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32", 495 | "shasum": "" 496 | }, 497 | "require": { 498 | "php": ">=5.3.0", 499 | "psr/container": "^1.0" 500 | }, 501 | "require-dev": { 502 | "symfony/phpunit-bridge": "^3.2" 503 | }, 504 | "type": "library", 505 | "extra": { 506 | "branch-alias": { 507 | "dev-master": "3.2.x-dev" 508 | } 509 | }, 510 | "autoload": { 511 | "psr-0": { 512 | "Pimple": "src/" 513 | } 514 | }, 515 | "notification-url": "https://packagist.org/downloads/", 516 | "license": [ 517 | "MIT" 518 | ], 519 | "authors": [ 520 | { 521 | "name": "Fabien Potencier", 522 | "email": "fabien@symfony.com" 523 | } 524 | ], 525 | "description": "Pimple, a simple Dependency Injection Container", 526 | "homepage": "http://pimple.sensiolabs.org", 527 | "keywords": [ 528 | "container", 529 | "dependency injection" 530 | ], 531 | "time": "2018-01-21T07:42:36+00:00" 532 | }, 533 | { 534 | "name": "psr/container", 535 | "version": "1.0.0", 536 | "source": { 537 | "type": "git", 538 | "url": "https://github.com/php-fig/container.git", 539 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" 540 | }, 541 | "dist": { 542 | "type": "zip", 543 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 544 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 545 | "shasum": "" 546 | }, 547 | "require": { 548 | "php": ">=5.3.0" 549 | }, 550 | "type": "library", 551 | "extra": { 552 | "branch-alias": { 553 | "dev-master": "1.0.x-dev" 554 | } 555 | }, 556 | "autoload": { 557 | "psr-4": { 558 | "Psr\\Container\\": "src/" 559 | } 560 | }, 561 | "notification-url": "https://packagist.org/downloads/", 562 | "license": [ 563 | "MIT" 564 | ], 565 | "authors": [ 566 | { 567 | "name": "PHP-FIG", 568 | "homepage": "http://www.php-fig.org/" 569 | } 570 | ], 571 | "description": "Common Container Interface (PHP FIG PSR-11)", 572 | "homepage": "https://github.com/php-fig/container", 573 | "keywords": [ 574 | "PSR-11", 575 | "container", 576 | "container-interface", 577 | "container-interop", 578 | "psr" 579 | ], 580 | "time": "2017-02-14T16:28:37+00:00" 581 | }, 582 | { 583 | "name": "psr/http-message", 584 | "version": "1.0.1", 585 | "source": { 586 | "type": "git", 587 | "url": "https://github.com/php-fig/http-message.git", 588 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 589 | }, 590 | "dist": { 591 | "type": "zip", 592 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 593 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 594 | "shasum": "" 595 | }, 596 | "require": { 597 | "php": ">=5.3.0" 598 | }, 599 | "type": "library", 600 | "extra": { 601 | "branch-alias": { 602 | "dev-master": "1.0.x-dev" 603 | } 604 | }, 605 | "autoload": { 606 | "psr-4": { 607 | "Psr\\Http\\Message\\": "src/" 608 | } 609 | }, 610 | "notification-url": "https://packagist.org/downloads/", 611 | "license": [ 612 | "MIT" 613 | ], 614 | "authors": [ 615 | { 616 | "name": "PHP-FIG", 617 | "homepage": "http://www.php-fig.org/" 618 | } 619 | ], 620 | "description": "Common interface for HTTP messages", 621 | "homepage": "https://github.com/php-fig/http-message", 622 | "keywords": [ 623 | "http", 624 | "http-message", 625 | "psr", 626 | "psr-7", 627 | "request", 628 | "response" 629 | ], 630 | "time": "2016-08-06T14:39:51+00:00" 631 | }, 632 | { 633 | "name": "psr/log", 634 | "version": "1.0.2", 635 | "source": { 636 | "type": "git", 637 | "url": "https://github.com/php-fig/log.git", 638 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" 639 | }, 640 | "dist": { 641 | "type": "zip", 642 | "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 643 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 644 | "shasum": "" 645 | }, 646 | "require": { 647 | "php": ">=5.3.0" 648 | }, 649 | "type": "library", 650 | "extra": { 651 | "branch-alias": { 652 | "dev-master": "1.0.x-dev" 653 | } 654 | }, 655 | "autoload": { 656 | "psr-4": { 657 | "Psr\\Log\\": "Psr/Log/" 658 | } 659 | }, 660 | "notification-url": "https://packagist.org/downloads/", 661 | "license": [ 662 | "MIT" 663 | ], 664 | "authors": [ 665 | { 666 | "name": "PHP-FIG", 667 | "homepage": "http://www.php-fig.org/" 668 | } 669 | ], 670 | "description": "Common interface for logging libraries", 671 | "homepage": "https://github.com/php-fig/log", 672 | "keywords": [ 673 | "log", 674 | "psr", 675 | "psr-3" 676 | ], 677 | "time": "2016-10-10T12:19:37+00:00" 678 | }, 679 | { 680 | "name": "psr/simple-cache", 681 | "version": "1.0.1", 682 | "source": { 683 | "type": "git", 684 | "url": "https://github.com/php-fig/simple-cache.git", 685 | "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" 686 | }, 687 | "dist": { 688 | "type": "zip", 689 | "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", 690 | "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", 691 | "shasum": "" 692 | }, 693 | "require": { 694 | "php": ">=5.3.0" 695 | }, 696 | "type": "library", 697 | "extra": { 698 | "branch-alias": { 699 | "dev-master": "1.0.x-dev" 700 | } 701 | }, 702 | "autoload": { 703 | "psr-4": { 704 | "Psr\\SimpleCache\\": "src/" 705 | } 706 | }, 707 | "notification-url": "https://packagist.org/downloads/", 708 | "license": [ 709 | "MIT" 710 | ], 711 | "authors": [ 712 | { 713 | "name": "PHP-FIG", 714 | "homepage": "http://www.php-fig.org/" 715 | } 716 | ], 717 | "description": "Common interfaces for simple caching", 718 | "keywords": [ 719 | "cache", 720 | "caching", 721 | "psr", 722 | "psr-16", 723 | "simple-cache" 724 | ], 725 | "time": "2017-10-23T01:57:42+00:00" 726 | }, 727 | { 728 | "name": "robmorgan/phinx", 729 | "version": "0.9.2", 730 | "source": { 731 | "type": "git", 732 | "url": "https://github.com/cakephp/phinx.git", 733 | "reference": "e1698319ad55157c233b658c08f7a10617e797ca" 734 | }, 735 | "dist": { 736 | "type": "zip", 737 | "url": "https://api.github.com/repos/cakephp/phinx/zipball/e1698319ad55157c233b658c08f7a10617e797ca", 738 | "reference": "e1698319ad55157c233b658c08f7a10617e797ca", 739 | "shasum": "" 740 | }, 741 | "require": { 742 | "php": ">=5.4", 743 | "symfony/config": "^2.8|^3.0|^4.0", 744 | "symfony/console": "^2.8|^3.0|^4.0", 745 | "symfony/yaml": "^2.8|^3.0|^4.0" 746 | }, 747 | "require-dev": { 748 | "cakephp/cakephp-codesniffer": "^3.0", 749 | "phpunit/phpunit": "^4.8.35|^5.7|^6.5" 750 | }, 751 | "bin": [ 752 | "bin/phinx" 753 | ], 754 | "type": "library", 755 | "autoload": { 756 | "psr-4": { 757 | "Phinx\\": "src/Phinx" 758 | } 759 | }, 760 | "notification-url": "https://packagist.org/downloads/", 761 | "license": [ 762 | "MIT" 763 | ], 764 | "authors": [ 765 | { 766 | "name": "Woody Gilk", 767 | "email": "woody.gilk@gmail.com", 768 | "homepage": "http://shadowhand.me", 769 | "role": "Developer" 770 | }, 771 | { 772 | "name": "Rob Morgan", 773 | "email": "robbym@gmail.com", 774 | "homepage": "https://robmorgan.id.au", 775 | "role": "Lead Developer" 776 | }, 777 | { 778 | "name": "Richard Quadling", 779 | "email": "rquadling@gmail.com", 780 | "role": "Developer" 781 | }, 782 | { 783 | "name": "CakePHP Community", 784 | "homepage": "https://github.com/cakephp/phinx/graphs/contributors" 785 | } 786 | ], 787 | "description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.", 788 | "homepage": "https://phinx.org", 789 | "keywords": [ 790 | "database", 791 | "database migrations", 792 | "db", 793 | "migrations", 794 | "phinx" 795 | ], 796 | "time": "2017-12-23T06:48:51+00:00" 797 | }, 798 | { 799 | "name": "slim/php-view", 800 | "version": "2.2.0", 801 | "source": { 802 | "type": "git", 803 | "url": "https://github.com/slimphp/PHP-View.git", 804 | "reference": "122ed121a8d9cf91a94020814d2a3ee6c836754f" 805 | }, 806 | "dist": { 807 | "type": "zip", 808 | "url": "https://api.github.com/repos/slimphp/PHP-View/zipball/122ed121a8d9cf91a94020814d2a3ee6c836754f", 809 | "reference": "122ed121a8d9cf91a94020814d2a3ee6c836754f", 810 | "shasum": "" 811 | }, 812 | "require": { 813 | "psr/http-message": "^1.0" 814 | }, 815 | "require-dev": { 816 | "phpunit/phpunit": "^4.8", 817 | "slim/slim": "^3.0" 818 | }, 819 | "type": "library", 820 | "autoload": { 821 | "psr-4": { 822 | "Slim\\Views\\": "src" 823 | } 824 | }, 825 | "notification-url": "https://packagist.org/downloads/", 826 | "license": [ 827 | "MIT" 828 | ], 829 | "authors": [ 830 | { 831 | "name": "Glenn Eggleton", 832 | "email": "geggleto@gmail.com" 833 | } 834 | ], 835 | "description": "Render PHP view scripts into a PSR-7 Response object.", 836 | "keywords": [ 837 | "framework", 838 | "php", 839 | "phtml", 840 | "renderer", 841 | "slim", 842 | "template", 843 | "view" 844 | ], 845 | "time": "2016-10-11T07:43:08+00:00" 846 | }, 847 | { 848 | "name": "slim/slim", 849 | "version": "3.10.0", 850 | "source": { 851 | "type": "git", 852 | "url": "https://github.com/slimphp/Slim.git", 853 | "reference": "d8aabeacc3688b25e2f2dd2db91df91ec6fdd748" 854 | }, 855 | "dist": { 856 | "type": "zip", 857 | "url": "https://api.github.com/repos/slimphp/Slim/zipball/d8aabeacc3688b25e2f2dd2db91df91ec6fdd748", 858 | "reference": "d8aabeacc3688b25e2f2dd2db91df91ec6fdd748", 859 | "shasum": "" 860 | }, 861 | "require": { 862 | "container-interop/container-interop": "^1.2", 863 | "nikic/fast-route": "^1.0", 864 | "php": ">=5.5.0", 865 | "pimple/pimple": "^3.0", 866 | "psr/container": "^1.0", 867 | "psr/http-message": "^1.0" 868 | }, 869 | "provide": { 870 | "psr/http-message-implementation": "1.0" 871 | }, 872 | "require-dev": { 873 | "phpunit/phpunit": "^4.0", 874 | "squizlabs/php_codesniffer": "^2.5" 875 | }, 876 | "type": "library", 877 | "autoload": { 878 | "psr-4": { 879 | "Slim\\": "Slim" 880 | } 881 | }, 882 | "notification-url": "https://packagist.org/downloads/", 883 | "license": [ 884 | "MIT" 885 | ], 886 | "authors": [ 887 | { 888 | "name": "Rob Allen", 889 | "email": "rob@akrabat.com", 890 | "homepage": "http://akrabat.com" 891 | }, 892 | { 893 | "name": "Josh Lockhart", 894 | "email": "hello@joshlockhart.com", 895 | "homepage": "https://joshlockhart.com" 896 | }, 897 | { 898 | "name": "Gabriel Manricks", 899 | "email": "gmanricks@me.com", 900 | "homepage": "http://gabrielmanricks.com" 901 | }, 902 | { 903 | "name": "Andrew Smith", 904 | "email": "a.smith@silentworks.co.uk", 905 | "homepage": "http://silentworks.co.uk" 906 | } 907 | ], 908 | "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs", 909 | "homepage": "https://slimframework.com", 910 | "keywords": [ 911 | "api", 912 | "framework", 913 | "micro", 914 | "router" 915 | ], 916 | "time": "2018-04-19T19:29:08+00:00" 917 | }, 918 | { 919 | "name": "symfony/config", 920 | "version": "v4.0.8", 921 | "source": { 922 | "type": "git", 923 | "url": "https://github.com/symfony/config.git", 924 | "reference": "7c19370ab04e9ac05b74a504198e165f5ccf6dd8" 925 | }, 926 | "dist": { 927 | "type": "zip", 928 | "url": "https://api.github.com/repos/symfony/config/zipball/7c19370ab04e9ac05b74a504198e165f5ccf6dd8", 929 | "reference": "7c19370ab04e9ac05b74a504198e165f5ccf6dd8", 930 | "shasum": "" 931 | }, 932 | "require": { 933 | "php": "^7.1.3", 934 | "symfony/filesystem": "~3.4|~4.0" 935 | }, 936 | "conflict": { 937 | "symfony/finder": "<3.4" 938 | }, 939 | "require-dev": { 940 | "symfony/dependency-injection": "~3.4|~4.0", 941 | "symfony/event-dispatcher": "~3.4|~4.0", 942 | "symfony/finder": "~3.4|~4.0", 943 | "symfony/yaml": "~3.4|~4.0" 944 | }, 945 | "suggest": { 946 | "symfony/yaml": "To use the yaml reference dumper" 947 | }, 948 | "type": "library", 949 | "extra": { 950 | "branch-alias": { 951 | "dev-master": "4.0-dev" 952 | } 953 | }, 954 | "autoload": { 955 | "psr-4": { 956 | "Symfony\\Component\\Config\\": "" 957 | }, 958 | "exclude-from-classmap": [ 959 | "/Tests/" 960 | ] 961 | }, 962 | "notification-url": "https://packagist.org/downloads/", 963 | "license": [ 964 | "MIT" 965 | ], 966 | "authors": [ 967 | { 968 | "name": "Fabien Potencier", 969 | "email": "fabien@symfony.com" 970 | }, 971 | { 972 | "name": "Symfony Community", 973 | "homepage": "https://symfony.com/contributors" 974 | } 975 | ], 976 | "description": "Symfony Config Component", 977 | "homepage": "https://symfony.com", 978 | "time": "2018-03-19T22:35:49+00:00" 979 | }, 980 | { 981 | "name": "symfony/console", 982 | "version": "v4.0.8", 983 | "source": { 984 | "type": "git", 985 | "url": "https://github.com/symfony/console.git", 986 | "reference": "aad9a6fe47319f22748fd764f52d3a7ca6fa6b64" 987 | }, 988 | "dist": { 989 | "type": "zip", 990 | "url": "https://api.github.com/repos/symfony/console/zipball/aad9a6fe47319f22748fd764f52d3a7ca6fa6b64", 991 | "reference": "aad9a6fe47319f22748fd764f52d3a7ca6fa6b64", 992 | "shasum": "" 993 | }, 994 | "require": { 995 | "php": "^7.1.3", 996 | "symfony/polyfill-mbstring": "~1.0" 997 | }, 998 | "conflict": { 999 | "symfony/dependency-injection": "<3.4", 1000 | "symfony/process": "<3.3" 1001 | }, 1002 | "require-dev": { 1003 | "psr/log": "~1.0", 1004 | "symfony/config": "~3.4|~4.0", 1005 | "symfony/dependency-injection": "~3.4|~4.0", 1006 | "symfony/event-dispatcher": "~3.4|~4.0", 1007 | "symfony/lock": "~3.4|~4.0", 1008 | "symfony/process": "~3.4|~4.0" 1009 | }, 1010 | "suggest": { 1011 | "psr/log": "For using the console logger", 1012 | "symfony/event-dispatcher": "", 1013 | "symfony/lock": "", 1014 | "symfony/process": "" 1015 | }, 1016 | "type": "library", 1017 | "extra": { 1018 | "branch-alias": { 1019 | "dev-master": "4.0-dev" 1020 | } 1021 | }, 1022 | "autoload": { 1023 | "psr-4": { 1024 | "Symfony\\Component\\Console\\": "" 1025 | }, 1026 | "exclude-from-classmap": [ 1027 | "/Tests/" 1028 | ] 1029 | }, 1030 | "notification-url": "https://packagist.org/downloads/", 1031 | "license": [ 1032 | "MIT" 1033 | ], 1034 | "authors": [ 1035 | { 1036 | "name": "Fabien Potencier", 1037 | "email": "fabien@symfony.com" 1038 | }, 1039 | { 1040 | "name": "Symfony Community", 1041 | "homepage": "https://symfony.com/contributors" 1042 | } 1043 | ], 1044 | "description": "Symfony Console Component", 1045 | "homepage": "https://symfony.com", 1046 | "time": "2018-04-03T05:24:00+00:00" 1047 | }, 1048 | { 1049 | "name": "symfony/filesystem", 1050 | "version": "v4.0.8", 1051 | "source": { 1052 | "type": "git", 1053 | "url": "https://github.com/symfony/filesystem.git", 1054 | "reference": "5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21" 1055 | }, 1056 | "dist": { 1057 | "type": "zip", 1058 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21", 1059 | "reference": "5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21", 1060 | "shasum": "" 1061 | }, 1062 | "require": { 1063 | "php": "^7.1.3" 1064 | }, 1065 | "type": "library", 1066 | "extra": { 1067 | "branch-alias": { 1068 | "dev-master": "4.0-dev" 1069 | } 1070 | }, 1071 | "autoload": { 1072 | "psr-4": { 1073 | "Symfony\\Component\\Filesystem\\": "" 1074 | }, 1075 | "exclude-from-classmap": [ 1076 | "/Tests/" 1077 | ] 1078 | }, 1079 | "notification-url": "https://packagist.org/downloads/", 1080 | "license": [ 1081 | "MIT" 1082 | ], 1083 | "authors": [ 1084 | { 1085 | "name": "Fabien Potencier", 1086 | "email": "fabien@symfony.com" 1087 | }, 1088 | { 1089 | "name": "Symfony Community", 1090 | "homepage": "https://symfony.com/contributors" 1091 | } 1092 | ], 1093 | "description": "Symfony Filesystem Component", 1094 | "homepage": "https://symfony.com", 1095 | "time": "2018-02-22T10:50:29+00:00" 1096 | }, 1097 | { 1098 | "name": "symfony/polyfill-mbstring", 1099 | "version": "v1.7.0", 1100 | "source": { 1101 | "type": "git", 1102 | "url": "https://github.com/symfony/polyfill-mbstring.git", 1103 | "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b" 1104 | }, 1105 | "dist": { 1106 | "type": "zip", 1107 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b", 1108 | "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b", 1109 | "shasum": "" 1110 | }, 1111 | "require": { 1112 | "php": ">=5.3.3" 1113 | }, 1114 | "suggest": { 1115 | "ext-mbstring": "For best performance" 1116 | }, 1117 | "type": "library", 1118 | "extra": { 1119 | "branch-alias": { 1120 | "dev-master": "1.7-dev" 1121 | } 1122 | }, 1123 | "autoload": { 1124 | "psr-4": { 1125 | "Symfony\\Polyfill\\Mbstring\\": "" 1126 | }, 1127 | "files": [ 1128 | "bootstrap.php" 1129 | ] 1130 | }, 1131 | "notification-url": "https://packagist.org/downloads/", 1132 | "license": [ 1133 | "MIT" 1134 | ], 1135 | "authors": [ 1136 | { 1137 | "name": "Nicolas Grekas", 1138 | "email": "p@tchwork.com" 1139 | }, 1140 | { 1141 | "name": "Symfony Community", 1142 | "homepage": "https://symfony.com/contributors" 1143 | } 1144 | ], 1145 | "description": "Symfony polyfill for the Mbstring extension", 1146 | "homepage": "https://symfony.com", 1147 | "keywords": [ 1148 | "compatibility", 1149 | "mbstring", 1150 | "polyfill", 1151 | "portable", 1152 | "shim" 1153 | ], 1154 | "time": "2018-01-30T19:27:44+00:00" 1155 | }, 1156 | { 1157 | "name": "symfony/translation", 1158 | "version": "v4.0.8", 1159 | "source": { 1160 | "type": "git", 1161 | "url": "https://github.com/symfony/translation.git", 1162 | "reference": "e20a9b7f9f62cb33a11638b345c248e7d510c938" 1163 | }, 1164 | "dist": { 1165 | "type": "zip", 1166 | "url": "https://api.github.com/repos/symfony/translation/zipball/e20a9b7f9f62cb33a11638b345c248e7d510c938", 1167 | "reference": "e20a9b7f9f62cb33a11638b345c248e7d510c938", 1168 | "shasum": "" 1169 | }, 1170 | "require": { 1171 | "php": "^7.1.3", 1172 | "symfony/polyfill-mbstring": "~1.0" 1173 | }, 1174 | "conflict": { 1175 | "symfony/config": "<3.4", 1176 | "symfony/dependency-injection": "<3.4", 1177 | "symfony/yaml": "<3.4" 1178 | }, 1179 | "require-dev": { 1180 | "psr/log": "~1.0", 1181 | "symfony/config": "~3.4|~4.0", 1182 | "symfony/dependency-injection": "~3.4|~4.0", 1183 | "symfony/finder": "~2.8|~3.0|~4.0", 1184 | "symfony/intl": "~3.4|~4.0", 1185 | "symfony/yaml": "~3.4|~4.0" 1186 | }, 1187 | "suggest": { 1188 | "psr/log": "To use logging capability in translator", 1189 | "symfony/config": "", 1190 | "symfony/yaml": "" 1191 | }, 1192 | "type": "library", 1193 | "extra": { 1194 | "branch-alias": { 1195 | "dev-master": "4.0-dev" 1196 | } 1197 | }, 1198 | "autoload": { 1199 | "psr-4": { 1200 | "Symfony\\Component\\Translation\\": "" 1201 | }, 1202 | "exclude-from-classmap": [ 1203 | "/Tests/" 1204 | ] 1205 | }, 1206 | "notification-url": "https://packagist.org/downloads/", 1207 | "license": [ 1208 | "MIT" 1209 | ], 1210 | "authors": [ 1211 | { 1212 | "name": "Fabien Potencier", 1213 | "email": "fabien@symfony.com" 1214 | }, 1215 | { 1216 | "name": "Symfony Community", 1217 | "homepage": "https://symfony.com/contributors" 1218 | } 1219 | ], 1220 | "description": "Symfony Translation Component", 1221 | "homepage": "https://symfony.com", 1222 | "time": "2018-02-22T10:50:29+00:00" 1223 | }, 1224 | { 1225 | "name": "symfony/yaml", 1226 | "version": "v4.0.8", 1227 | "source": { 1228 | "type": "git", 1229 | "url": "https://github.com/symfony/yaml.git", 1230 | "reference": "8b34ebb5989df61cbd77eff29a02c4db9ac1069c" 1231 | }, 1232 | "dist": { 1233 | "type": "zip", 1234 | "url": "https://api.github.com/repos/symfony/yaml/zipball/8b34ebb5989df61cbd77eff29a02c4db9ac1069c", 1235 | "reference": "8b34ebb5989df61cbd77eff29a02c4db9ac1069c", 1236 | "shasum": "" 1237 | }, 1238 | "require": { 1239 | "php": "^7.1.3" 1240 | }, 1241 | "conflict": { 1242 | "symfony/console": "<3.4" 1243 | }, 1244 | "require-dev": { 1245 | "symfony/console": "~3.4|~4.0" 1246 | }, 1247 | "suggest": { 1248 | "symfony/console": "For validating YAML files using the lint command" 1249 | }, 1250 | "type": "library", 1251 | "extra": { 1252 | "branch-alias": { 1253 | "dev-master": "4.0-dev" 1254 | } 1255 | }, 1256 | "autoload": { 1257 | "psr-4": { 1258 | "Symfony\\Component\\Yaml\\": "" 1259 | }, 1260 | "exclude-from-classmap": [ 1261 | "/Tests/" 1262 | ] 1263 | }, 1264 | "notification-url": "https://packagist.org/downloads/", 1265 | "license": [ 1266 | "MIT" 1267 | ], 1268 | "authors": [ 1269 | { 1270 | "name": "Fabien Potencier", 1271 | "email": "fabien@symfony.com" 1272 | }, 1273 | { 1274 | "name": "Symfony Community", 1275 | "homepage": "https://symfony.com/contributors" 1276 | } 1277 | ], 1278 | "description": "Symfony Yaml Component", 1279 | "homepage": "https://symfony.com", 1280 | "time": "2018-04-03T05:24:00+00:00" 1281 | }, 1282 | { 1283 | "name": "vlucas/phpdotenv", 1284 | "version": "v2.4.0", 1285 | "source": { 1286 | "type": "git", 1287 | "url": "https://github.com/vlucas/phpdotenv.git", 1288 | "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c" 1289 | }, 1290 | "dist": { 1291 | "type": "zip", 1292 | "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c", 1293 | "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c", 1294 | "shasum": "" 1295 | }, 1296 | "require": { 1297 | "php": ">=5.3.9" 1298 | }, 1299 | "require-dev": { 1300 | "phpunit/phpunit": "^4.8 || ^5.0" 1301 | }, 1302 | "type": "library", 1303 | "extra": { 1304 | "branch-alias": { 1305 | "dev-master": "2.4-dev" 1306 | } 1307 | }, 1308 | "autoload": { 1309 | "psr-4": { 1310 | "Dotenv\\": "src/" 1311 | } 1312 | }, 1313 | "notification-url": "https://packagist.org/downloads/", 1314 | "license": [ 1315 | "BSD-3-Clause-Attribution" 1316 | ], 1317 | "authors": [ 1318 | { 1319 | "name": "Vance Lucas", 1320 | "email": "vance@vancelucas.com", 1321 | "homepage": "http://www.vancelucas.com" 1322 | } 1323 | ], 1324 | "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", 1325 | "keywords": [ 1326 | "dotenv", 1327 | "env", 1328 | "environment" 1329 | ], 1330 | "time": "2016-09-01T10:05:43+00:00" 1331 | } 1332 | ], 1333 | "packages-dev": [ 1334 | { 1335 | "name": "doctrine/instantiator", 1336 | "version": "1.1.0", 1337 | "source": { 1338 | "type": "git", 1339 | "url": "https://github.com/doctrine/instantiator.git", 1340 | "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" 1341 | }, 1342 | "dist": { 1343 | "type": "zip", 1344 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", 1345 | "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", 1346 | "shasum": "" 1347 | }, 1348 | "require": { 1349 | "php": "^7.1" 1350 | }, 1351 | "require-dev": { 1352 | "athletic/athletic": "~0.1.8", 1353 | "ext-pdo": "*", 1354 | "ext-phar": "*", 1355 | "phpunit/phpunit": "^6.2.3", 1356 | "squizlabs/php_codesniffer": "^3.0.2" 1357 | }, 1358 | "type": "library", 1359 | "extra": { 1360 | "branch-alias": { 1361 | "dev-master": "1.2.x-dev" 1362 | } 1363 | }, 1364 | "autoload": { 1365 | "psr-4": { 1366 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 1367 | } 1368 | }, 1369 | "notification-url": "https://packagist.org/downloads/", 1370 | "license": [ 1371 | "MIT" 1372 | ], 1373 | "authors": [ 1374 | { 1375 | "name": "Marco Pivetta", 1376 | "email": "ocramius@gmail.com", 1377 | "homepage": "http://ocramius.github.com/" 1378 | } 1379 | ], 1380 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 1381 | "homepage": "https://github.com/doctrine/instantiator", 1382 | "keywords": [ 1383 | "constructor", 1384 | "instantiate" 1385 | ], 1386 | "time": "2017-07-22T11:58:36+00:00" 1387 | }, 1388 | { 1389 | "name": "myclabs/deep-copy", 1390 | "version": "1.7.0", 1391 | "source": { 1392 | "type": "git", 1393 | "url": "https://github.com/myclabs/DeepCopy.git", 1394 | "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" 1395 | }, 1396 | "dist": { 1397 | "type": "zip", 1398 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", 1399 | "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", 1400 | "shasum": "" 1401 | }, 1402 | "require": { 1403 | "php": "^5.6 || ^7.0" 1404 | }, 1405 | "require-dev": { 1406 | "doctrine/collections": "^1.0", 1407 | "doctrine/common": "^2.6", 1408 | "phpunit/phpunit": "^4.1" 1409 | }, 1410 | "type": "library", 1411 | "autoload": { 1412 | "psr-4": { 1413 | "DeepCopy\\": "src/DeepCopy/" 1414 | }, 1415 | "files": [ 1416 | "src/DeepCopy/deep_copy.php" 1417 | ] 1418 | }, 1419 | "notification-url": "https://packagist.org/downloads/", 1420 | "license": [ 1421 | "MIT" 1422 | ], 1423 | "description": "Create deep copies (clones) of your objects", 1424 | "keywords": [ 1425 | "clone", 1426 | "copy", 1427 | "duplicate", 1428 | "object", 1429 | "object graph" 1430 | ], 1431 | "time": "2017-10-19T19:58:43+00:00" 1432 | }, 1433 | { 1434 | "name": "phpdocumentor/reflection-common", 1435 | "version": "1.0.1", 1436 | "source": { 1437 | "type": "git", 1438 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 1439 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" 1440 | }, 1441 | "dist": { 1442 | "type": "zip", 1443 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", 1444 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", 1445 | "shasum": "" 1446 | }, 1447 | "require": { 1448 | "php": ">=5.5" 1449 | }, 1450 | "require-dev": { 1451 | "phpunit/phpunit": "^4.6" 1452 | }, 1453 | "type": "library", 1454 | "extra": { 1455 | "branch-alias": { 1456 | "dev-master": "1.0.x-dev" 1457 | } 1458 | }, 1459 | "autoload": { 1460 | "psr-4": { 1461 | "phpDocumentor\\Reflection\\": [ 1462 | "src" 1463 | ] 1464 | } 1465 | }, 1466 | "notification-url": "https://packagist.org/downloads/", 1467 | "license": [ 1468 | "MIT" 1469 | ], 1470 | "authors": [ 1471 | { 1472 | "name": "Jaap van Otterdijk", 1473 | "email": "opensource@ijaap.nl" 1474 | } 1475 | ], 1476 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 1477 | "homepage": "http://www.phpdoc.org", 1478 | "keywords": [ 1479 | "FQSEN", 1480 | "phpDocumentor", 1481 | "phpdoc", 1482 | "reflection", 1483 | "static analysis" 1484 | ], 1485 | "time": "2017-09-11T18:02:19+00:00" 1486 | }, 1487 | { 1488 | "name": "phpdocumentor/reflection-docblock", 1489 | "version": "4.3.0", 1490 | "source": { 1491 | "type": "git", 1492 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 1493 | "reference": "94fd0001232e47129dd3504189fa1c7225010d08" 1494 | }, 1495 | "dist": { 1496 | "type": "zip", 1497 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", 1498 | "reference": "94fd0001232e47129dd3504189fa1c7225010d08", 1499 | "shasum": "" 1500 | }, 1501 | "require": { 1502 | "php": "^7.0", 1503 | "phpdocumentor/reflection-common": "^1.0.0", 1504 | "phpdocumentor/type-resolver": "^0.4.0", 1505 | "webmozart/assert": "^1.0" 1506 | }, 1507 | "require-dev": { 1508 | "doctrine/instantiator": "~1.0.5", 1509 | "mockery/mockery": "^1.0", 1510 | "phpunit/phpunit": "^6.4" 1511 | }, 1512 | "type": "library", 1513 | "extra": { 1514 | "branch-alias": { 1515 | "dev-master": "4.x-dev" 1516 | } 1517 | }, 1518 | "autoload": { 1519 | "psr-4": { 1520 | "phpDocumentor\\Reflection\\": [ 1521 | "src/" 1522 | ] 1523 | } 1524 | }, 1525 | "notification-url": "https://packagist.org/downloads/", 1526 | "license": [ 1527 | "MIT" 1528 | ], 1529 | "authors": [ 1530 | { 1531 | "name": "Mike van Riel", 1532 | "email": "me@mikevanriel.com" 1533 | } 1534 | ], 1535 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 1536 | "time": "2017-11-30T07:14:17+00:00" 1537 | }, 1538 | { 1539 | "name": "phpdocumentor/type-resolver", 1540 | "version": "0.4.0", 1541 | "source": { 1542 | "type": "git", 1543 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 1544 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" 1545 | }, 1546 | "dist": { 1547 | "type": "zip", 1548 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", 1549 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", 1550 | "shasum": "" 1551 | }, 1552 | "require": { 1553 | "php": "^5.5 || ^7.0", 1554 | "phpdocumentor/reflection-common": "^1.0" 1555 | }, 1556 | "require-dev": { 1557 | "mockery/mockery": "^0.9.4", 1558 | "phpunit/phpunit": "^5.2||^4.8.24" 1559 | }, 1560 | "type": "library", 1561 | "extra": { 1562 | "branch-alias": { 1563 | "dev-master": "1.0.x-dev" 1564 | } 1565 | }, 1566 | "autoload": { 1567 | "psr-4": { 1568 | "phpDocumentor\\Reflection\\": [ 1569 | "src/" 1570 | ] 1571 | } 1572 | }, 1573 | "notification-url": "https://packagist.org/downloads/", 1574 | "license": [ 1575 | "MIT" 1576 | ], 1577 | "authors": [ 1578 | { 1579 | "name": "Mike van Riel", 1580 | "email": "me@mikevanriel.com" 1581 | } 1582 | ], 1583 | "time": "2017-07-14T14:27:02+00:00" 1584 | }, 1585 | { 1586 | "name": "phpspec/prophecy", 1587 | "version": "1.7.6", 1588 | "source": { 1589 | "type": "git", 1590 | "url": "https://github.com/phpspec/prophecy.git", 1591 | "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712" 1592 | }, 1593 | "dist": { 1594 | "type": "zip", 1595 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712", 1596 | "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712", 1597 | "shasum": "" 1598 | }, 1599 | "require": { 1600 | "doctrine/instantiator": "^1.0.2", 1601 | "php": "^5.3|^7.0", 1602 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", 1603 | "sebastian/comparator": "^1.1|^2.0|^3.0", 1604 | "sebastian/recursion-context": "^1.0|^2.0|^3.0" 1605 | }, 1606 | "require-dev": { 1607 | "phpspec/phpspec": "^2.5|^3.2", 1608 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" 1609 | }, 1610 | "type": "library", 1611 | "extra": { 1612 | "branch-alias": { 1613 | "dev-master": "1.7.x-dev" 1614 | } 1615 | }, 1616 | "autoload": { 1617 | "psr-0": { 1618 | "Prophecy\\": "src/" 1619 | } 1620 | }, 1621 | "notification-url": "https://packagist.org/downloads/", 1622 | "license": [ 1623 | "MIT" 1624 | ], 1625 | "authors": [ 1626 | { 1627 | "name": "Konstantin Kudryashov", 1628 | "email": "ever.zet@gmail.com", 1629 | "homepage": "http://everzet.com" 1630 | }, 1631 | { 1632 | "name": "Marcello Duarte", 1633 | "email": "marcello.duarte@gmail.com" 1634 | } 1635 | ], 1636 | "description": "Highly opinionated mocking framework for PHP 5.3+", 1637 | "homepage": "https://github.com/phpspec/prophecy", 1638 | "keywords": [ 1639 | "Double", 1640 | "Dummy", 1641 | "fake", 1642 | "mock", 1643 | "spy", 1644 | "stub" 1645 | ], 1646 | "time": "2018-04-18T13:57:24+00:00" 1647 | }, 1648 | { 1649 | "name": "phpunit/php-code-coverage", 1650 | "version": "4.0.8", 1651 | "source": { 1652 | "type": "git", 1653 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 1654 | "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d" 1655 | }, 1656 | "dist": { 1657 | "type": "zip", 1658 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d", 1659 | "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d", 1660 | "shasum": "" 1661 | }, 1662 | "require": { 1663 | "ext-dom": "*", 1664 | "ext-xmlwriter": "*", 1665 | "php": "^5.6 || ^7.0", 1666 | "phpunit/php-file-iterator": "^1.3", 1667 | "phpunit/php-text-template": "^1.2", 1668 | "phpunit/php-token-stream": "^1.4.2 || ^2.0", 1669 | "sebastian/code-unit-reverse-lookup": "^1.0", 1670 | "sebastian/environment": "^1.3.2 || ^2.0", 1671 | "sebastian/version": "^1.0 || ^2.0" 1672 | }, 1673 | "require-dev": { 1674 | "ext-xdebug": "^2.1.4", 1675 | "phpunit/phpunit": "^5.7" 1676 | }, 1677 | "suggest": { 1678 | "ext-xdebug": "^2.5.1" 1679 | }, 1680 | "type": "library", 1681 | "extra": { 1682 | "branch-alias": { 1683 | "dev-master": "4.0.x-dev" 1684 | } 1685 | }, 1686 | "autoload": { 1687 | "classmap": [ 1688 | "src/" 1689 | ] 1690 | }, 1691 | "notification-url": "https://packagist.org/downloads/", 1692 | "license": [ 1693 | "BSD-3-Clause" 1694 | ], 1695 | "authors": [ 1696 | { 1697 | "name": "Sebastian Bergmann", 1698 | "email": "sb@sebastian-bergmann.de", 1699 | "role": "lead" 1700 | } 1701 | ], 1702 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 1703 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 1704 | "keywords": [ 1705 | "coverage", 1706 | "testing", 1707 | "xunit" 1708 | ], 1709 | "time": "2017-04-02T07:44:40+00:00" 1710 | }, 1711 | { 1712 | "name": "phpunit/php-file-iterator", 1713 | "version": "1.4.5", 1714 | "source": { 1715 | "type": "git", 1716 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 1717 | "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" 1718 | }, 1719 | "dist": { 1720 | "type": "zip", 1721 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", 1722 | "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", 1723 | "shasum": "" 1724 | }, 1725 | "require": { 1726 | "php": ">=5.3.3" 1727 | }, 1728 | "type": "library", 1729 | "extra": { 1730 | "branch-alias": { 1731 | "dev-master": "1.4.x-dev" 1732 | } 1733 | }, 1734 | "autoload": { 1735 | "classmap": [ 1736 | "src/" 1737 | ] 1738 | }, 1739 | "notification-url": "https://packagist.org/downloads/", 1740 | "license": [ 1741 | "BSD-3-Clause" 1742 | ], 1743 | "authors": [ 1744 | { 1745 | "name": "Sebastian Bergmann", 1746 | "email": "sb@sebastian-bergmann.de", 1747 | "role": "lead" 1748 | } 1749 | ], 1750 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 1751 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 1752 | "keywords": [ 1753 | "filesystem", 1754 | "iterator" 1755 | ], 1756 | "time": "2017-11-27T13:52:08+00:00" 1757 | }, 1758 | { 1759 | "name": "phpunit/php-text-template", 1760 | "version": "1.2.1", 1761 | "source": { 1762 | "type": "git", 1763 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 1764 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 1765 | }, 1766 | "dist": { 1767 | "type": "zip", 1768 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1769 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1770 | "shasum": "" 1771 | }, 1772 | "require": { 1773 | "php": ">=5.3.3" 1774 | }, 1775 | "type": "library", 1776 | "autoload": { 1777 | "classmap": [ 1778 | "src/" 1779 | ] 1780 | }, 1781 | "notification-url": "https://packagist.org/downloads/", 1782 | "license": [ 1783 | "BSD-3-Clause" 1784 | ], 1785 | "authors": [ 1786 | { 1787 | "name": "Sebastian Bergmann", 1788 | "email": "sebastian@phpunit.de", 1789 | "role": "lead" 1790 | } 1791 | ], 1792 | "description": "Simple template engine.", 1793 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 1794 | "keywords": [ 1795 | "template" 1796 | ], 1797 | "time": "2015-06-21T13:50:34+00:00" 1798 | }, 1799 | { 1800 | "name": "phpunit/php-timer", 1801 | "version": "1.0.9", 1802 | "source": { 1803 | "type": "git", 1804 | "url": "https://github.com/sebastianbergmann/php-timer.git", 1805 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" 1806 | }, 1807 | "dist": { 1808 | "type": "zip", 1809 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", 1810 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", 1811 | "shasum": "" 1812 | }, 1813 | "require": { 1814 | "php": "^5.3.3 || ^7.0" 1815 | }, 1816 | "require-dev": { 1817 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" 1818 | }, 1819 | "type": "library", 1820 | "extra": { 1821 | "branch-alias": { 1822 | "dev-master": "1.0-dev" 1823 | } 1824 | }, 1825 | "autoload": { 1826 | "classmap": [ 1827 | "src/" 1828 | ] 1829 | }, 1830 | "notification-url": "https://packagist.org/downloads/", 1831 | "license": [ 1832 | "BSD-3-Clause" 1833 | ], 1834 | "authors": [ 1835 | { 1836 | "name": "Sebastian Bergmann", 1837 | "email": "sb@sebastian-bergmann.de", 1838 | "role": "lead" 1839 | } 1840 | ], 1841 | "description": "Utility class for timing", 1842 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 1843 | "keywords": [ 1844 | "timer" 1845 | ], 1846 | "time": "2017-02-26T11:10:40+00:00" 1847 | }, 1848 | { 1849 | "name": "phpunit/php-token-stream", 1850 | "version": "2.0.2", 1851 | "source": { 1852 | "type": "git", 1853 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 1854 | "reference": "791198a2c6254db10131eecfe8c06670700904db" 1855 | }, 1856 | "dist": { 1857 | "type": "zip", 1858 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", 1859 | "reference": "791198a2c6254db10131eecfe8c06670700904db", 1860 | "shasum": "" 1861 | }, 1862 | "require": { 1863 | "ext-tokenizer": "*", 1864 | "php": "^7.0" 1865 | }, 1866 | "require-dev": { 1867 | "phpunit/phpunit": "^6.2.4" 1868 | }, 1869 | "type": "library", 1870 | "extra": { 1871 | "branch-alias": { 1872 | "dev-master": "2.0-dev" 1873 | } 1874 | }, 1875 | "autoload": { 1876 | "classmap": [ 1877 | "src/" 1878 | ] 1879 | }, 1880 | "notification-url": "https://packagist.org/downloads/", 1881 | "license": [ 1882 | "BSD-3-Clause" 1883 | ], 1884 | "authors": [ 1885 | { 1886 | "name": "Sebastian Bergmann", 1887 | "email": "sebastian@phpunit.de" 1888 | } 1889 | ], 1890 | "description": "Wrapper around PHP's tokenizer extension.", 1891 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 1892 | "keywords": [ 1893 | "tokenizer" 1894 | ], 1895 | "time": "2017-11-27T05:48:46+00:00" 1896 | }, 1897 | { 1898 | "name": "phpunit/phpunit", 1899 | "version": "5.7.27", 1900 | "source": { 1901 | "type": "git", 1902 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1903 | "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c" 1904 | }, 1905 | "dist": { 1906 | "type": "zip", 1907 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c", 1908 | "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c", 1909 | "shasum": "" 1910 | }, 1911 | "require": { 1912 | "ext-dom": "*", 1913 | "ext-json": "*", 1914 | "ext-libxml": "*", 1915 | "ext-mbstring": "*", 1916 | "ext-xml": "*", 1917 | "myclabs/deep-copy": "~1.3", 1918 | "php": "^5.6 || ^7.0", 1919 | "phpspec/prophecy": "^1.6.2", 1920 | "phpunit/php-code-coverage": "^4.0.4", 1921 | "phpunit/php-file-iterator": "~1.4", 1922 | "phpunit/php-text-template": "~1.2", 1923 | "phpunit/php-timer": "^1.0.6", 1924 | "phpunit/phpunit-mock-objects": "^3.2", 1925 | "sebastian/comparator": "^1.2.4", 1926 | "sebastian/diff": "^1.4.3", 1927 | "sebastian/environment": "^1.3.4 || ^2.0", 1928 | "sebastian/exporter": "~2.0", 1929 | "sebastian/global-state": "^1.1", 1930 | "sebastian/object-enumerator": "~2.0", 1931 | "sebastian/resource-operations": "~1.0", 1932 | "sebastian/version": "^1.0.6|^2.0.1", 1933 | "symfony/yaml": "~2.1|~3.0|~4.0" 1934 | }, 1935 | "conflict": { 1936 | "phpdocumentor/reflection-docblock": "3.0.2" 1937 | }, 1938 | "require-dev": { 1939 | "ext-pdo": "*" 1940 | }, 1941 | "suggest": { 1942 | "ext-xdebug": "*", 1943 | "phpunit/php-invoker": "~1.1" 1944 | }, 1945 | "bin": [ 1946 | "phpunit" 1947 | ], 1948 | "type": "library", 1949 | "extra": { 1950 | "branch-alias": { 1951 | "dev-master": "5.7.x-dev" 1952 | } 1953 | }, 1954 | "autoload": { 1955 | "classmap": [ 1956 | "src/" 1957 | ] 1958 | }, 1959 | "notification-url": "https://packagist.org/downloads/", 1960 | "license": [ 1961 | "BSD-3-Clause" 1962 | ], 1963 | "authors": [ 1964 | { 1965 | "name": "Sebastian Bergmann", 1966 | "email": "sebastian@phpunit.de", 1967 | "role": "lead" 1968 | } 1969 | ], 1970 | "description": "The PHP Unit Testing framework.", 1971 | "homepage": "https://phpunit.de/", 1972 | "keywords": [ 1973 | "phpunit", 1974 | "testing", 1975 | "xunit" 1976 | ], 1977 | "time": "2018-02-01T05:50:59+00:00" 1978 | }, 1979 | { 1980 | "name": "phpunit/phpunit-mock-objects", 1981 | "version": "3.4.4", 1982 | "source": { 1983 | "type": "git", 1984 | "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", 1985 | "reference": "a23b761686d50a560cc56233b9ecf49597cc9118" 1986 | }, 1987 | "dist": { 1988 | "type": "zip", 1989 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118", 1990 | "reference": "a23b761686d50a560cc56233b9ecf49597cc9118", 1991 | "shasum": "" 1992 | }, 1993 | "require": { 1994 | "doctrine/instantiator": "^1.0.2", 1995 | "php": "^5.6 || ^7.0", 1996 | "phpunit/php-text-template": "^1.2", 1997 | "sebastian/exporter": "^1.2 || ^2.0" 1998 | }, 1999 | "conflict": { 2000 | "phpunit/phpunit": "<5.4.0" 2001 | }, 2002 | "require-dev": { 2003 | "phpunit/phpunit": "^5.4" 2004 | }, 2005 | "suggest": { 2006 | "ext-soap": "*" 2007 | }, 2008 | "type": "library", 2009 | "extra": { 2010 | "branch-alias": { 2011 | "dev-master": "3.2.x-dev" 2012 | } 2013 | }, 2014 | "autoload": { 2015 | "classmap": [ 2016 | "src/" 2017 | ] 2018 | }, 2019 | "notification-url": "https://packagist.org/downloads/", 2020 | "license": [ 2021 | "BSD-3-Clause" 2022 | ], 2023 | "authors": [ 2024 | { 2025 | "name": "Sebastian Bergmann", 2026 | "email": "sb@sebastian-bergmann.de", 2027 | "role": "lead" 2028 | } 2029 | ], 2030 | "description": "Mock Object library for PHPUnit", 2031 | "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", 2032 | "keywords": [ 2033 | "mock", 2034 | "xunit" 2035 | ], 2036 | "time": "2017-06-30T09:13:00+00:00" 2037 | }, 2038 | { 2039 | "name": "sebastian/code-unit-reverse-lookup", 2040 | "version": "1.0.1", 2041 | "source": { 2042 | "type": "git", 2043 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 2044 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" 2045 | }, 2046 | "dist": { 2047 | "type": "zip", 2048 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 2049 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 2050 | "shasum": "" 2051 | }, 2052 | "require": { 2053 | "php": "^5.6 || ^7.0" 2054 | }, 2055 | "require-dev": { 2056 | "phpunit/phpunit": "^5.7 || ^6.0" 2057 | }, 2058 | "type": "library", 2059 | "extra": { 2060 | "branch-alias": { 2061 | "dev-master": "1.0.x-dev" 2062 | } 2063 | }, 2064 | "autoload": { 2065 | "classmap": [ 2066 | "src/" 2067 | ] 2068 | }, 2069 | "notification-url": "https://packagist.org/downloads/", 2070 | "license": [ 2071 | "BSD-3-Clause" 2072 | ], 2073 | "authors": [ 2074 | { 2075 | "name": "Sebastian Bergmann", 2076 | "email": "sebastian@phpunit.de" 2077 | } 2078 | ], 2079 | "description": "Looks up which function or method a line of code belongs to", 2080 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 2081 | "time": "2017-03-04T06:30:41+00:00" 2082 | }, 2083 | { 2084 | "name": "sebastian/comparator", 2085 | "version": "1.2.4", 2086 | "source": { 2087 | "type": "git", 2088 | "url": "https://github.com/sebastianbergmann/comparator.git", 2089 | "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" 2090 | }, 2091 | "dist": { 2092 | "type": "zip", 2093 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", 2094 | "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", 2095 | "shasum": "" 2096 | }, 2097 | "require": { 2098 | "php": ">=5.3.3", 2099 | "sebastian/diff": "~1.2", 2100 | "sebastian/exporter": "~1.2 || ~2.0" 2101 | }, 2102 | "require-dev": { 2103 | "phpunit/phpunit": "~4.4" 2104 | }, 2105 | "type": "library", 2106 | "extra": { 2107 | "branch-alias": { 2108 | "dev-master": "1.2.x-dev" 2109 | } 2110 | }, 2111 | "autoload": { 2112 | "classmap": [ 2113 | "src/" 2114 | ] 2115 | }, 2116 | "notification-url": "https://packagist.org/downloads/", 2117 | "license": [ 2118 | "BSD-3-Clause" 2119 | ], 2120 | "authors": [ 2121 | { 2122 | "name": "Jeff Welch", 2123 | "email": "whatthejeff@gmail.com" 2124 | }, 2125 | { 2126 | "name": "Volker Dusch", 2127 | "email": "github@wallbash.com" 2128 | }, 2129 | { 2130 | "name": "Bernhard Schussek", 2131 | "email": "bschussek@2bepublished.at" 2132 | }, 2133 | { 2134 | "name": "Sebastian Bergmann", 2135 | "email": "sebastian@phpunit.de" 2136 | } 2137 | ], 2138 | "description": "Provides the functionality to compare PHP values for equality", 2139 | "homepage": "http://www.github.com/sebastianbergmann/comparator", 2140 | "keywords": [ 2141 | "comparator", 2142 | "compare", 2143 | "equality" 2144 | ], 2145 | "time": "2017-01-29T09:50:25+00:00" 2146 | }, 2147 | { 2148 | "name": "sebastian/diff", 2149 | "version": "1.4.3", 2150 | "source": { 2151 | "type": "git", 2152 | "url": "https://github.com/sebastianbergmann/diff.git", 2153 | "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" 2154 | }, 2155 | "dist": { 2156 | "type": "zip", 2157 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", 2158 | "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", 2159 | "shasum": "" 2160 | }, 2161 | "require": { 2162 | "php": "^5.3.3 || ^7.0" 2163 | }, 2164 | "require-dev": { 2165 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" 2166 | }, 2167 | "type": "library", 2168 | "extra": { 2169 | "branch-alias": { 2170 | "dev-master": "1.4-dev" 2171 | } 2172 | }, 2173 | "autoload": { 2174 | "classmap": [ 2175 | "src/" 2176 | ] 2177 | }, 2178 | "notification-url": "https://packagist.org/downloads/", 2179 | "license": [ 2180 | "BSD-3-Clause" 2181 | ], 2182 | "authors": [ 2183 | { 2184 | "name": "Kore Nordmann", 2185 | "email": "mail@kore-nordmann.de" 2186 | }, 2187 | { 2188 | "name": "Sebastian Bergmann", 2189 | "email": "sebastian@phpunit.de" 2190 | } 2191 | ], 2192 | "description": "Diff implementation", 2193 | "homepage": "https://github.com/sebastianbergmann/diff", 2194 | "keywords": [ 2195 | "diff" 2196 | ], 2197 | "time": "2017-05-22T07:24:03+00:00" 2198 | }, 2199 | { 2200 | "name": "sebastian/environment", 2201 | "version": "2.0.0", 2202 | "source": { 2203 | "type": "git", 2204 | "url": "https://github.com/sebastianbergmann/environment.git", 2205 | "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac" 2206 | }, 2207 | "dist": { 2208 | "type": "zip", 2209 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac", 2210 | "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac", 2211 | "shasum": "" 2212 | }, 2213 | "require": { 2214 | "php": "^5.6 || ^7.0" 2215 | }, 2216 | "require-dev": { 2217 | "phpunit/phpunit": "^5.0" 2218 | }, 2219 | "type": "library", 2220 | "extra": { 2221 | "branch-alias": { 2222 | "dev-master": "2.0.x-dev" 2223 | } 2224 | }, 2225 | "autoload": { 2226 | "classmap": [ 2227 | "src/" 2228 | ] 2229 | }, 2230 | "notification-url": "https://packagist.org/downloads/", 2231 | "license": [ 2232 | "BSD-3-Clause" 2233 | ], 2234 | "authors": [ 2235 | { 2236 | "name": "Sebastian Bergmann", 2237 | "email": "sebastian@phpunit.de" 2238 | } 2239 | ], 2240 | "description": "Provides functionality to handle HHVM/PHP environments", 2241 | "homepage": "http://www.github.com/sebastianbergmann/environment", 2242 | "keywords": [ 2243 | "Xdebug", 2244 | "environment", 2245 | "hhvm" 2246 | ], 2247 | "time": "2016-11-26T07:53:53+00:00" 2248 | }, 2249 | { 2250 | "name": "sebastian/exporter", 2251 | "version": "2.0.0", 2252 | "source": { 2253 | "type": "git", 2254 | "url": "https://github.com/sebastianbergmann/exporter.git", 2255 | "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" 2256 | }, 2257 | "dist": { 2258 | "type": "zip", 2259 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", 2260 | "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", 2261 | "shasum": "" 2262 | }, 2263 | "require": { 2264 | "php": ">=5.3.3", 2265 | "sebastian/recursion-context": "~2.0" 2266 | }, 2267 | "require-dev": { 2268 | "ext-mbstring": "*", 2269 | "phpunit/phpunit": "~4.4" 2270 | }, 2271 | "type": "library", 2272 | "extra": { 2273 | "branch-alias": { 2274 | "dev-master": "2.0.x-dev" 2275 | } 2276 | }, 2277 | "autoload": { 2278 | "classmap": [ 2279 | "src/" 2280 | ] 2281 | }, 2282 | "notification-url": "https://packagist.org/downloads/", 2283 | "license": [ 2284 | "BSD-3-Clause" 2285 | ], 2286 | "authors": [ 2287 | { 2288 | "name": "Jeff Welch", 2289 | "email": "whatthejeff@gmail.com" 2290 | }, 2291 | { 2292 | "name": "Volker Dusch", 2293 | "email": "github@wallbash.com" 2294 | }, 2295 | { 2296 | "name": "Bernhard Schussek", 2297 | "email": "bschussek@2bepublished.at" 2298 | }, 2299 | { 2300 | "name": "Sebastian Bergmann", 2301 | "email": "sebastian@phpunit.de" 2302 | }, 2303 | { 2304 | "name": "Adam Harvey", 2305 | "email": "aharvey@php.net" 2306 | } 2307 | ], 2308 | "description": "Provides the functionality to export PHP variables for visualization", 2309 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 2310 | "keywords": [ 2311 | "export", 2312 | "exporter" 2313 | ], 2314 | "time": "2016-11-19T08:54:04+00:00" 2315 | }, 2316 | { 2317 | "name": "sebastian/global-state", 2318 | "version": "1.1.1", 2319 | "source": { 2320 | "type": "git", 2321 | "url": "https://github.com/sebastianbergmann/global-state.git", 2322 | "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" 2323 | }, 2324 | "dist": { 2325 | "type": "zip", 2326 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", 2327 | "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", 2328 | "shasum": "" 2329 | }, 2330 | "require": { 2331 | "php": ">=5.3.3" 2332 | }, 2333 | "require-dev": { 2334 | "phpunit/phpunit": "~4.2" 2335 | }, 2336 | "suggest": { 2337 | "ext-uopz": "*" 2338 | }, 2339 | "type": "library", 2340 | "extra": { 2341 | "branch-alias": { 2342 | "dev-master": "1.0-dev" 2343 | } 2344 | }, 2345 | "autoload": { 2346 | "classmap": [ 2347 | "src/" 2348 | ] 2349 | }, 2350 | "notification-url": "https://packagist.org/downloads/", 2351 | "license": [ 2352 | "BSD-3-Clause" 2353 | ], 2354 | "authors": [ 2355 | { 2356 | "name": "Sebastian Bergmann", 2357 | "email": "sebastian@phpunit.de" 2358 | } 2359 | ], 2360 | "description": "Snapshotting of global state", 2361 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 2362 | "keywords": [ 2363 | "global state" 2364 | ], 2365 | "time": "2015-10-12T03:26:01+00:00" 2366 | }, 2367 | { 2368 | "name": "sebastian/object-enumerator", 2369 | "version": "2.0.1", 2370 | "source": { 2371 | "type": "git", 2372 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 2373 | "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" 2374 | }, 2375 | "dist": { 2376 | "type": "zip", 2377 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", 2378 | "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", 2379 | "shasum": "" 2380 | }, 2381 | "require": { 2382 | "php": ">=5.6", 2383 | "sebastian/recursion-context": "~2.0" 2384 | }, 2385 | "require-dev": { 2386 | "phpunit/phpunit": "~5" 2387 | }, 2388 | "type": "library", 2389 | "extra": { 2390 | "branch-alias": { 2391 | "dev-master": "2.0.x-dev" 2392 | } 2393 | }, 2394 | "autoload": { 2395 | "classmap": [ 2396 | "src/" 2397 | ] 2398 | }, 2399 | "notification-url": "https://packagist.org/downloads/", 2400 | "license": [ 2401 | "BSD-3-Clause" 2402 | ], 2403 | "authors": [ 2404 | { 2405 | "name": "Sebastian Bergmann", 2406 | "email": "sebastian@phpunit.de" 2407 | } 2408 | ], 2409 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 2410 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 2411 | "time": "2017-02-18T15:18:39+00:00" 2412 | }, 2413 | { 2414 | "name": "sebastian/recursion-context", 2415 | "version": "2.0.0", 2416 | "source": { 2417 | "type": "git", 2418 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 2419 | "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" 2420 | }, 2421 | "dist": { 2422 | "type": "zip", 2423 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", 2424 | "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", 2425 | "shasum": "" 2426 | }, 2427 | "require": { 2428 | "php": ">=5.3.3" 2429 | }, 2430 | "require-dev": { 2431 | "phpunit/phpunit": "~4.4" 2432 | }, 2433 | "type": "library", 2434 | "extra": { 2435 | "branch-alias": { 2436 | "dev-master": "2.0.x-dev" 2437 | } 2438 | }, 2439 | "autoload": { 2440 | "classmap": [ 2441 | "src/" 2442 | ] 2443 | }, 2444 | "notification-url": "https://packagist.org/downloads/", 2445 | "license": [ 2446 | "BSD-3-Clause" 2447 | ], 2448 | "authors": [ 2449 | { 2450 | "name": "Jeff Welch", 2451 | "email": "whatthejeff@gmail.com" 2452 | }, 2453 | { 2454 | "name": "Sebastian Bergmann", 2455 | "email": "sebastian@phpunit.de" 2456 | }, 2457 | { 2458 | "name": "Adam Harvey", 2459 | "email": "aharvey@php.net" 2460 | } 2461 | ], 2462 | "description": "Provides functionality to recursively process PHP variables", 2463 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 2464 | "time": "2016-11-19T07:33:16+00:00" 2465 | }, 2466 | { 2467 | "name": "sebastian/resource-operations", 2468 | "version": "1.0.0", 2469 | "source": { 2470 | "type": "git", 2471 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 2472 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" 2473 | }, 2474 | "dist": { 2475 | "type": "zip", 2476 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 2477 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 2478 | "shasum": "" 2479 | }, 2480 | "require": { 2481 | "php": ">=5.6.0" 2482 | }, 2483 | "type": "library", 2484 | "extra": { 2485 | "branch-alias": { 2486 | "dev-master": "1.0.x-dev" 2487 | } 2488 | }, 2489 | "autoload": { 2490 | "classmap": [ 2491 | "src/" 2492 | ] 2493 | }, 2494 | "notification-url": "https://packagist.org/downloads/", 2495 | "license": [ 2496 | "BSD-3-Clause" 2497 | ], 2498 | "authors": [ 2499 | { 2500 | "name": "Sebastian Bergmann", 2501 | "email": "sebastian@phpunit.de" 2502 | } 2503 | ], 2504 | "description": "Provides a list of PHP built-in functions that operate on resources", 2505 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 2506 | "time": "2015-07-28T20:34:47+00:00" 2507 | }, 2508 | { 2509 | "name": "sebastian/version", 2510 | "version": "2.0.1", 2511 | "source": { 2512 | "type": "git", 2513 | "url": "https://github.com/sebastianbergmann/version.git", 2514 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 2515 | }, 2516 | "dist": { 2517 | "type": "zip", 2518 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", 2519 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 2520 | "shasum": "" 2521 | }, 2522 | "require": { 2523 | "php": ">=5.6" 2524 | }, 2525 | "type": "library", 2526 | "extra": { 2527 | "branch-alias": { 2528 | "dev-master": "2.0.x-dev" 2529 | } 2530 | }, 2531 | "autoload": { 2532 | "classmap": [ 2533 | "src/" 2534 | ] 2535 | }, 2536 | "notification-url": "https://packagist.org/downloads/", 2537 | "license": [ 2538 | "BSD-3-Clause" 2539 | ], 2540 | "authors": [ 2541 | { 2542 | "name": "Sebastian Bergmann", 2543 | "email": "sebastian@phpunit.de", 2544 | "role": "lead" 2545 | } 2546 | ], 2547 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 2548 | "homepage": "https://github.com/sebastianbergmann/version", 2549 | "time": "2016-10-03T07:35:21+00:00" 2550 | }, 2551 | { 2552 | "name": "webmozart/assert", 2553 | "version": "1.3.0", 2554 | "source": { 2555 | "type": "git", 2556 | "url": "https://github.com/webmozart/assert.git", 2557 | "reference": "0df1908962e7a3071564e857d86874dad1ef204a" 2558 | }, 2559 | "dist": { 2560 | "type": "zip", 2561 | "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", 2562 | "reference": "0df1908962e7a3071564e857d86874dad1ef204a", 2563 | "shasum": "" 2564 | }, 2565 | "require": { 2566 | "php": "^5.3.3 || ^7.0" 2567 | }, 2568 | "require-dev": { 2569 | "phpunit/phpunit": "^4.6", 2570 | "sebastian/version": "^1.0.1" 2571 | }, 2572 | "type": "library", 2573 | "extra": { 2574 | "branch-alias": { 2575 | "dev-master": "1.3-dev" 2576 | } 2577 | }, 2578 | "autoload": { 2579 | "psr-4": { 2580 | "Webmozart\\Assert\\": "src/" 2581 | } 2582 | }, 2583 | "notification-url": "https://packagist.org/downloads/", 2584 | "license": [ 2585 | "MIT" 2586 | ], 2587 | "authors": [ 2588 | { 2589 | "name": "Bernhard Schussek", 2590 | "email": "bschussek@gmail.com" 2591 | } 2592 | ], 2593 | "description": "Assertions to validate method input/output with nice error messages.", 2594 | "keywords": [ 2595 | "assert", 2596 | "check", 2597 | "validate" 2598 | ], 2599 | "time": "2018-01-29T19:49:41+00:00" 2600 | } 2601 | ], 2602 | "aliases": [], 2603 | "minimum-stability": "stable", 2604 | "stability-flags": [], 2605 | "prefer-stable": false, 2606 | "prefer-lowest": false, 2607 | "platform": { 2608 | "php": ">=7.0" 2609 | }, 2610 | "platform-dev": [] 2611 | } 2612 | -------------------------------------------------------------------------------- /migrations/20180423125618_create_books_table.php: -------------------------------------------------------------------------------- 1 | table('books'); 13 | $users->addColumn('name', 'string', ['limit' => 200]) 14 | ->addColumn('created_at', 'timestamp', ['default' => 'CURRENT_TIMESTAMP']) 15 | ->addColumn('updated_at', 'timestamp', ['null' => true]) 16 | ->save(); 17 | } 18 | 19 | /** 20 | * Migrate Down. 21 | */ 22 | public function down() 23 | { 24 | $this->execute('DROP database books'); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /phinx.php: -------------------------------------------------------------------------------- 1 | load(); 7 | 8 | $config = require __DIR__ . '/src/config.php'; 9 | 10 | return [ 11 | 'paths' => [ 12 | 'migrations' => 'migrations' 13 | ], 14 | 'environments' => [ 15 | 'default_migration_table' => 'phinxlog', 16 | 'default_database' => 'dev', 17 | 'dev' => [ 18 | 'adapter' => $config['db']['driver'], 19 | 'host' => $config['db']['host'], 20 | 'name' => $config['db']['database'], 21 | 'user' => $config['db']['username'], 22 | 'pass' => $config['db']['password'], 23 | 'port' => $config['db']['port'], 24 | ] 25 | ] 26 | ]; 27 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | tests 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /public/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | RewriteEngine On 3 | 4 | # Some hosts may require you to use the `RewriteBase` directive. 5 | # Determine the RewriteBase automatically and set it as environment variable. 6 | # If you are using Apache aliases to do mass virtual hosting or installed the 7 | # project in a subdirectory, the base path will be prepended to allow proper 8 | # resolution of the index.php file and to redirect to the correct URI. It will 9 | # work in environments without path prefix as well, providing a safe, one-size 10 | # fits all solution. But as you do not need it in this case, you can comment 11 | # the following 2 lines to eliminate the overhead. 12 | RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ 13 | RewriteRule ^(.*) - [E=BASE:%1] 14 | 15 | # If the above doesn't work you might need to set the `RewriteBase` directive manually, it should be the 16 | # absolute physical path to the directory that contains this htaccess file. 17 | # RewriteBase / 18 | 19 | RewriteCond %{REQUEST_FILENAME} !-f 20 | RewriteRule ^ index.php [QSA,L] 21 | 22 | -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | container = $container; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/Controllers/BooksController.php: -------------------------------------------------------------------------------- 1 | withJson($books); 23 | } 24 | 25 | /** 26 | * @param Request $request 27 | * @param Response $response 28 | * @return Response 29 | */ 30 | public function show(Request $request, Response $response): Response 31 | { 32 | try { 33 | $book = Book::findOrFail($request->getAttribute('id')); 34 | } catch (ModelNotFoundException $modelNotFoundException) { 35 | return $response->withStatus(404); 36 | } 37 | 38 | return $response->withJson($book); 39 | } 40 | 41 | /** 42 | * @param Request $request 43 | * @param Response $response 44 | * @return Response 45 | */ 46 | public function store(Request $request, Response $response): Response 47 | { 48 | try { 49 | Book::create($request->getParsedBodyParam('name')); 50 | } catch (\PDOException $exception) { 51 | $this->container->get('logger')->error($exception); 52 | 53 | return $response->withStatus(500); 54 | } catch (\Exception $exception) { 55 | $this->container->get('logger')->error($exception); 56 | 57 | return $response->withStatus(500); 58 | } 59 | 60 | return $response->withStatus(201); 61 | } 62 | 63 | /** 64 | * @param Request $request 65 | * @param Response $response 66 | * @return Response 67 | */ 68 | public function update(Request $request, Response $response): Response 69 | { 70 | try { 71 | $book = Book::findOrFail($request->getAttribute('id')); 72 | } catch (ModelNotFoundException $modelNotFoundException) { 73 | return $response->withStatus(404); 74 | } 75 | 76 | try { 77 | $book->update($request->getParsedBodyParam('name')); 78 | } catch (QueryException $queryException) { 79 | $this->container->get('logger')->error('An error encountered while updating book.', 80 | ['name' => $request->getAttribute('name')] 81 | ); 82 | 83 | return $response->withStatus(500); 84 | } 85 | 86 | return $response->withStatus(204); 87 | } 88 | 89 | /** 90 | * @param Request $request 91 | * @param Response $response 92 | * @return Response 93 | */ 94 | public function destroy(Request $request, Response $response): Response 95 | { 96 | try { 97 | $book = Book::findOrFail($request->getAttribute('id')); 98 | } catch (ModelNotFoundException $modelNotFoundException) { 99 | return $response->withStatus(404); 100 | } 101 | 102 | if (!$book->delete()) { 103 | $this->container->get('logger')->error('An error encountered while updating book.', 104 | ['id' => $request->getAttribute('id')] 105 | ); 106 | 107 | return $response->withStatus(500); 108 | } 109 | 110 | return $response->withStatus(204); 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /src/Models/Book.php: -------------------------------------------------------------------------------- 1 | 'local' === getenv('APP_ENV'), 5 | 'addContentLengthHeader' => false, 6 | 'determineRouteBeforeAppMiddleware' => false, 7 | 8 | // Renderer settings 9 | 'renderer' => [ 10 | 'template_path' => __DIR__ . '/../templates/', 11 | ], 12 | 13 | // Monolog settings 14 | 'logger' => [ 15 | 'name' => getenv('APP_NAME'), 16 | 'path' => isset($_ENV['docker']) ? 'php://stdout' : __DIR__ . '/../logs/kapi.log', 17 | 'level' => \Monolog\Logger::DEBUG, 18 | ], 19 | 20 | // Database settings 21 | 'db' => [ 22 | 'driver' => getenv('DB_DRIVER'), 23 | 'host' => getenv('DB_HOST'), 24 | 'database' => getenv('DB_DATABASE'), 25 | 'username' => getenv('DB_USERNAME'), 26 | 'password' => getenv('DB_PASSWORD'), 27 | 'charset' => 'utf8', 28 | 'port' => getenv('DB_PORT'), 29 | 'collation' => 'utf8_unicode_ci', 30 | 'prefix' => '' 31 | ] 32 | ]; 33 | -------------------------------------------------------------------------------- /src/routes.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | API Endpoints 6 | 45 | 46 | 47 |

KAPI Endpoints

48 | 49 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /tests/ExampleTest.php: -------------------------------------------------------------------------------- 1 | assertTrue(true); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 | $requestMethod, 40 | 'REQUEST_URI' => $requestUri, 41 | ]); 42 | 43 | // Set up a request object based on the environment 44 | $request = Request::createFromEnvironment($environment); 45 | 46 | // Add request data, if it exists 47 | if (isset($requestData)) { 48 | $request = $request->withParsedBody($requestData); 49 | } 50 | 51 | $dotenv = new \Dotenv\Dotenv(__DIR__ . '/..'); 52 | $dotenv->load(); 53 | 54 | // Set up a response object 55 | $response = new Response(); 56 | 57 | // Use the application settings 58 | $settings['settings'] = require __DIR__ . '/../src/config.php'; 59 | 60 | // Instantiate the application 61 | $app = new App($settings); 62 | 63 | // View renderer 64 | $container['view'] = function ($c) { 65 | $settings = $c->get('settings')['renderer']; 66 | return new \Slim\Views\PhpRenderer($settings['template_path']); 67 | }; 68 | 69 | // Monolog 70 | $container['logger'] = function ($c) { 71 | $settings = $c->get('settings')['logger']; 72 | $logger = new \Monolog\Logger($settings['name']); 73 | $logger->pushProcessor(new \Monolog\Processor\UidProcessor()); 74 | $logger->pushHandler(new \Monolog\Handler\StreamHandler($settings['path'], $settings['level'])); 75 | return $logger; 76 | }; 77 | 78 | // Eloquent 79 | $capsule = new \Illuminate\Database\Capsule\Manager; 80 | $capsule->addConnection($settings['settings']['db']); 81 | $capsule->bootEloquent(); 82 | $capsule->setAsGlobal(); 83 | 84 | // Routes 85 | $urls = require __DIR__ . '/../src/routes.php'; 86 | 87 | foreach ($urls as $url) { 88 | $app->{$url['0']}($url[1], '\App\Controllers\\' . $url[2]); 89 | } 90 | 91 | // Process the application 92 | $response = $app->process($request, $response); 93 | 94 | // Return the response 95 | return $response; 96 | } 97 | } 98 | --------------------------------------------------------------------------------