├── database
├── .gitignore
└── migrations
│ └── users.php
├── storage
├── app
│ └── .gitignore
├── logs
│ └── .gitignore
└── framework
│ ├── cache
│ └── .gitignore
│ ├── views
│ └── .gitignore
│ ├── sessions
│ └── .gitignore
│ └── .gitignore
├── .gitignore
├── .htaccess
├── package.json
├── bootstrap
├── app.php
└── autoload.php
├── public
├── .htaccess
└── index.php
├── config
├── console.php
└── config.php
├── app
├── console-helpers.php
├── Console
│ ├── MainTask.php
│ └── MigrateTask.php
├── routes.php
├── Providers
│ ├── ConsoleServiceProvider.php
│ ├── WebServiceProvider.php
│ └── AppServiceProvider.php
├── Controllers
│ ├── AppController.php
│ └── Controller.php
├── Foundation
│ ├── ServiceProvider.php
│ └── Application.php
└── helpers.php
├── tests
├── ExampleTest.php
├── HelperTest.php
└── TestCase.php
├── resources
├── assets
│ ├── less
│ │ └── site.less
│ └── coffee
│ │ └── site.coffee
└── views
│ └── welcome.volt
├── PHPunit.xml
├── _example.php
├── composer.json
├── gulpfile.js
├── install.sh
├── console
├── README.md
├── LICENSE
└── composer.lock
/database/.gitignore:
--------------------------------------------------------------------------------
1 | *.sqlite
2 |
--------------------------------------------------------------------------------
/storage/app/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
--------------------------------------------------------------------------------
/storage/logs/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /.idea
2 | /vendor
3 | /node_modules
4 | _
--------------------------------------------------------------------------------
/storage/framework/cache/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
--------------------------------------------------------------------------------
/storage/framework/views/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/sessions/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/.gitignore:
--------------------------------------------------------------------------------
1 | config.php
2 | routes.php
3 | compiled.php
4 | services.json
5 | events.scanned.php
6 | routes.scanned.php
7 | down
8 |
--------------------------------------------------------------------------------
/.htaccess:
--------------------------------------------------------------------------------
1 |
2 | RewriteEngine on
3 | RewriteRule ^$ public/ [L]
4 | RewriteRule ((?s).*) public/$1 [L]
5 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "devDependencies": {
4 | "gulp": "^3.9.1"
5 | },
6 | "dependencies": {
7 | "laravel-elixir": "^5.0.0"
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/bootstrap/app.php:
--------------------------------------------------------------------------------
1 |
4 | */
5 |
6 | $app = new \App\Foundation\Application();
7 |
8 | $app->registerExceptionHandler();
9 |
10 | return $app;
--------------------------------------------------------------------------------
/public/.htaccess:
--------------------------------------------------------------------------------
1 |
2 | RewriteEngine On
3 | RewriteCond %{REQUEST_FILENAME} !-d
4 | RewriteCond %{REQUEST_FILENAME} !-f
5 | RewriteRule ^((?s).*)$ index.php?_url=/$1 [QSA,L]
6 |
--------------------------------------------------------------------------------
/config/console.php:
--------------------------------------------------------------------------------
1 |
4 | */
5 |
6 | return [// NOTICE! These options will take effect only in CLI mode
7 | 'database' => [
8 | 'eloquent' => true,
9 | ],
10 | ];
--------------------------------------------------------------------------------
/app/console-helpers.php:
--------------------------------------------------------------------------------
1 |
4 | */
5 |
6 | function console()
7 | {
8 | static $climate = null;
9 |
10 | if (!$climate) {
11 | $climate = new League\CLImate\CLImate;
12 | }
13 |
14 | return $climate;
15 | }
--------------------------------------------------------------------------------
/app/Console/MainTask.php:
--------------------------------------------------------------------------------
1 |
6 | */
7 | class MainTask extends \Phalcon\CLI\Task
8 | {
9 | public function mainAction()
10 | {
11 | console()->out('Lightning v'.Application::VERSION);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/routes.php:
--------------------------------------------------------------------------------
1 |
4 | */
5 |
6 | use Phalcon\Mvc\Micro\Collection as MicroCollection;
7 |
8 | $appController = new MicroCollection();
9 | $appController->setHandler(App\Controllers\AppController::class, true);
10 | $appController->get('/', 'hi');
11 |
12 | $micro->mount($appController);
13 |
14 | $micro->notFound(function () {
15 | return abort(404);
16 | });
--------------------------------------------------------------------------------
/tests/ExampleTest.php:
--------------------------------------------------------------------------------
1 |
8 | */
9 | class ExampleTest extends TestCase
10 | {
11 | public function testShouldSeeWelcome()
12 | {
13 | $provider = Request::getProvider();
14 | $response = $provider->get('http://localhost/');
15 |
16 | $this->assertEquals(true,
17 | str_contains($response->body, "I'm Lightning!")
18 | );
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/Providers/ConsoleServiceProvider.php:
--------------------------------------------------------------------------------
1 |
4 | */
5 |
6 | namespace App\Providers;
7 |
8 | use App\Foundation\ServiceProvider;
9 |
10 | /**
11 | * Runs only in the command line environment
12 | * @package App\Providers
13 | */
14 | class ConsoleServiceProvider extends ServiceProvider
15 | {
16 | /**
17 | * Register any application services.
18 | *
19 | * @return void
20 | */
21 | protected function register()
22 | {
23 | //
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/app/Controllers/AppController.php:
--------------------------------------------------------------------------------
1 |
4 | */
5 |
6 | namespace App\Controllers;
7 |
8 | use App\Foundation\Application;
9 |
10 | class AppController extends Controller
11 | {
12 | public function hi()
13 | {
14 | echo $this->view->render('welcome', [
15 | 'version' => Application::VERSION,
16 | 'motto' => 'If I have seen further, it is by standing on the shoulders of giants.',
17 | 'author' => 'Isaac Newton',
18 | ]);
19 | }
20 | }
--------------------------------------------------------------------------------
/resources/assets/less/site.less:
--------------------------------------------------------------------------------
1 | body {
2 | font-family: "Microsoft YaHei";
3 | font-size: 16px;
4 | }
5 |
6 | img {
7 | max-width: 100%;
8 | height: auto;
9 | }
10 |
11 | [ng-cloak],
12 | [data-ng-cloak],
13 | .ng-cloak,
14 | .ng-hide {
15 | display: none !important;
16 | }
17 |
18 | .cloak {
19 | display: none;
20 | }
21 |
22 | .no-radius {
23 | border-radius: 0 ! important;
24 | }
25 |
26 | .no-margin {
27 | margin: 0;
28 | }
29 |
30 | .no-padding {
31 | padding: 0;
32 | }
33 |
34 | #bottom {
35 | width: 100%;
36 | }
--------------------------------------------------------------------------------
/database/migrations/users.php:
--------------------------------------------------------------------------------
1 |
4 | */
5 |
6 | use Illuminate\Database\Capsule\Manager;
7 | use Illuminate\Database\Schema\Blueprint;
8 |
9 | Manager::schema()->dropIfExists('users');
10 |
11 | Manager::schema()->create('users', function (Blueprint $table) {
12 | $table->increments('id');
13 | $table->string('name');
14 | /** @noinspection PhpUndefinedMethodInspection */
15 | $table->string('email')->unique();
16 | $table->string('password', 60);
17 | $table->rememberToken();
18 | $table->timestamps();
19 | });
--------------------------------------------------------------------------------
/PHPunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 | ./tests/
15 |
16 |
--------------------------------------------------------------------------------
/resources/assets/coffee/site.coffee:
--------------------------------------------------------------------------------
1 | ###*
2 | # @param {string} body id="body"
3 | # @param {string} bottom id="bottom"
4 | ###
5 | window.fixBottom = (body = 'body', bottom = 'bottom') ->
6 | infoHeight = document.getElementById(body).scrollHeight
7 | bottomHeight = document.getElementById(bottom).scrollHeight
8 | allHeight = document.documentElement.clientHeight
9 |
10 | bottom = document.getElementById(bottom)
11 |
12 | if infoHeight + bottomHeight < allHeight
13 | bottom.style.position = 'absolute'
14 | bottom.style.bottom = '0'
15 | return
16 | else
17 | bottom.style.position = ''
18 | bottom.style.bottom = ''
19 | return
--------------------------------------------------------------------------------
/app/Controllers/Controller.php:
--------------------------------------------------------------------------------
1 |
4 | */
5 |
6 | namespace App\Controllers;
7 |
8 | use Phalcon\Mvc\Controller as Base;
9 |
10 | class Controller extends Base
11 | {
12 | public function initialize()
13 | {
14 | //
15 | }
16 |
17 | public function onConstruct()
18 | {
19 | //
20 | }
21 |
22 | protected function dontProfile()
23 | {
24 | define('DONT_PROFILE', true);
25 | }
26 |
27 | protected function json($content)
28 | {
29 | $this->response->setContentType('application/json');
30 |
31 | $this->response->setContent(json_encode($content));
32 |
33 | return $this->response;
34 | }
35 | }
--------------------------------------------------------------------------------
/_example.php:
--------------------------------------------------------------------------------
1 |
4 | */
5 | return [
6 | 'debug' => true,
7 |
8 | 'cache' => [
9 | 'driver' => 'file',
10 | 'file' => [
11 | 'dir' => ROOT.'/storage/framework/cache/',
12 | ],
13 | 'memcached' => [
14 | [
15 | 'host' => '127.0.0.1',
16 | 'port' => '11211',
17 | 'weight' => '100',
18 | ],
19 | ],
20 | ],
21 |
22 | 'database' => [
23 | 'mysql' => [
24 | 'host' => '127.0.0.1',
25 | 'username' => 'root',
26 | 'password' => '',
27 | 'dbname' => 'lightning',
28 | ],
29 | ],
30 | ];
--------------------------------------------------------------------------------
/app/Foundation/ServiceProvider.php:
--------------------------------------------------------------------------------
1 |
4 | */
5 |
6 | namespace App\Foundation;
7 |
8 | use Phalcon\DiInterface;
9 |
10 | abstract class ServiceProvider
11 | {
12 | /**
13 | * @var DiInterface
14 | */
15 | protected $di;
16 | protected $config;
17 |
18 | public function __construct(DiInterface $di, $config = null)
19 | {
20 | $this->di = $di;
21 | $this->config = $config;
22 | }
23 |
24 | public function inject()
25 | {
26 | $this->register();
27 |
28 | return $this->di;
29 | }
30 |
31 | /**
32 | * Register any application services.
33 | *
34 | * @return void
35 | */
36 | abstract protected function register();
37 | }
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "zxz054321/lightning",
3 | "description": "A micro framework powered by Phalcon",
4 | "minimum-stability": "stable",
5 | "license": "Apache-2.0",
6 | "authors": [
7 | {
8 | "name": "Abel",
9 | "email": "zxz054321@163.com"
10 | }
11 | ],
12 | "require": {
13 | "illuminate/support": "^5.2",
14 | "illuminate/database": "^5.2",
15 | "illuminate/events": "^5.2",
16 | "league/climate": "^3.2"
17 | },
18 | "require-dev": {
19 | "phpunit/phpunit": "~4.5",
20 | "phalcon/incubator": "^2.0",
21 | "fabfuel/prophiler": "^1.5",
22 | "symfony/var-dumper": "^3.0"
23 | },
24 | "autoload": {
25 | "files": [
26 | "app/helpers.php"
27 | ]
28 | },
29 | "autoload-dev": {
30 | "classmap": [
31 | "tests/TestCase.php"
32 | ]
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/gulpfile.js:
--------------------------------------------------------------------------------
1 | var elixir = require('laravel-elixir');
2 |
3 | /*
4 | |--------------------------------------------------------------------------
5 | | Elixir Asset Management
6 | |--------------------------------------------------------------------------
7 | |
8 | | Elixir provides a clean, fluent API for defining some basic Gulp tasks
9 | | for your Laravel application. By default, we are compiling the Sass
10 | | file for our application, as well as publishing vendor resources.
11 | |
12 | */
13 |
14 | elixir(function (mix) {
15 | mix.less([
16 | 'site.less',
17 | //more sytles
18 | ], 'public/all.css');
19 |
20 | mix.coffee([
21 | 'site.coffee',
22 | //more scripts
23 | ], 'public/all.js');
24 |
25 | //mix.version([
26 | // 'all.css',
27 | // 'all.js',
28 | //]);
29 | });
30 |
--------------------------------------------------------------------------------
/bootstrap/autoload.php:
--------------------------------------------------------------------------------
1 |
4 | */
5 |
6 | /*
7 | * Constant definitions
8 | */
9 | if (!defined('ROOT')) {
10 | define('ROOT', realpath(__DIR__.'/../'));
11 | }
12 |
13 | if (!defined('APP_PATH')) {
14 | define('APP_PATH', ROOT.'/app');
15 | }
16 |
17 | if (!defined('CONFIG_PATH')) {
18 | define('CONFIG_PATH', ROOT.'/config');
19 | }
20 |
21 | if (!defined('VIEW_PATH')) {
22 | define('VIEW_PATH', ROOT.'/resources/views');
23 | }
24 |
25 | if (!defined('STORAGE_PATH')) {
26 | define('STORAGE_PATH', ROOT.'/storage');
27 | }
28 |
29 | /*
30 | * Autoloader
31 | */
32 | require ROOT.'/vendor/autoload.php';
33 |
34 | // Register some namespaces
35 | $loader = new \Phalcon\Loader();
36 | $loader->registerNamespaces([
37 | 'App' => ROOT.'/app/',
38 | ]);
39 | $loader->register();
40 |
41 | return $loader;
--------------------------------------------------------------------------------
/app/Console/MigrateTask.php:
--------------------------------------------------------------------------------
1 |
5 | */
6 | class MigrateTask extends \Phalcon\CLI\Task
7 | {
8 | protected $migrations = [
9 | // 'users',
10 | ];
11 |
12 | public function mainAction()
13 | {
14 | if (!config('debug')) {
15 | $input = console()->confirm(
16 | "Application May In Production!\n".
17 | 'Do you really wish to run this command?'
18 | );
19 |
20 | if (!$input->confirmed()) {
21 | return;
22 | }
23 | }
24 |
25 | foreach ($this->migrations as $migration) {
26 | /** @noinspection PhpIncludeInspection */
27 | require ROOT."/database/migrations/$migration.php";
28 |
29 | console()->out('Migrated: '.$migration);
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/install.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # Created by Abel on 2016/2/3.
4 |
5 | echo "Lightning Installer"
6 | echo "by Abel "
7 |
8 | sudo chown -R www.www *
9 | sudo chmod -R 666 storage
10 |
11 | if [ ! -f "/usr/local/bin/composer" ]; then
12 | echo "Downloading Composer installer..."
13 | php -r "readfile('https://getcomposer.org/installer');" > composer-setup.php
14 | php composer-setup.php
15 | php -r "unlink('composer-setup.php');"
16 | sudo mv composer.phar /usr/local/bin/composer
17 | echo "composer installed."
18 | fi
19 |
20 | if [ ! -f "_" ]; then
21 | echo "Would you like to setup ENV now?"
22 | echo "Please enter the ENV filename."
23 | echo "ENV list:"
24 | ls _*.php
25 | echo ""
26 | echo "Your choose:"
27 | read input
28 | echo ""
29 | if [ -f "$input" ];then
30 | sudo mv $input _
31 | cat _
32 | echo ""
33 | echo ""
34 | echo "Done."
35 | echo ""
36 | fi
37 | fi
38 |
39 | if [ ! -d "vendor" ]; then
40 | composer install --no-dev
41 | composer dump-autoload --optimize
42 | fi
--------------------------------------------------------------------------------
/config/config.php:
--------------------------------------------------------------------------------
1 |
4 | */
5 |
6 | return [// NOTICE! These options will always take effect
7 | /*
8 | * When your application is in debug mode, detailed error messages with
9 | * stack traces will be shown on every error that occurs within your
10 | * application. If disabled, nothing is shown.
11 | */
12 | 'debug' => false,
13 |
14 | /*
15 | * Here you may specify the default timezone for your application, which
16 | * will be used by the PHP date and date-time functions. We have gone
17 | * ahead and set this to a sensible default for you out of the box.
18 | */
19 | 'timezone' => 'PRC',
20 |
21 | 'database' => [
22 | /*
23 | * Enable the Laravel's Eloquent ORM. It is a full database toolkit
24 | * for PHP, providing an expressive query builder,
25 | * ActiveRecord style ORM, and schema builder.
26 | */
27 | 'eloquent' => false,
28 |
29 | 'mysql' => [
30 | 'prefix' => '',
31 | 'charset' => 'utf8',
32 | ],
33 | ],
34 | ];
--------------------------------------------------------------------------------
/resources/views/welcome.volt:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Lightning
6 |
36 |
37 |
38 |
39 |
40 |
Version: {{ version }}
41 |
Lightning
42 |
{{ motto }}
43 |
{{ author }}
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/tests/HelperTest.php:
--------------------------------------------------------------------------------
1 |
8 | */
9 | class HelperTest extends TestCase
10 | {
11 | public function testApp()
12 | {
13 | $this->assertInstanceOf(DiInterface::class, app());
14 | }
15 |
16 | public function testConfig()
17 | {
18 | $this->assertInstanceOf(Config::class, config());
19 | $this->assertEquals(true, is_bool(config('debug')));
20 | /** @noinspection PhpUndefinedFieldInspection */
21 | $this->assertEquals(true, is_bool(config('database')->eloquent));
22 | }
23 |
24 | public function testAbort()
25 | {
26 | $this->assertInstanceOf(Phalcon\Http\Response::class, abort(404));
27 | }
28 |
29 | public function testSession()
30 | {
31 | $key = 'test'.time();
32 | $val = md5($key);
33 | session([$key => $val]);
34 |
35 | $this->assertInstanceOf(Phalcon\Session\Adapter::class, session());
36 | $this->assertEquals($val, session($key));
37 | $this->assertEquals(null, session($key.'none'));
38 | $this->assertEquals('abc', session($key.'none', 'abc'));
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/app/Providers/WebServiceProvider.php:
--------------------------------------------------------------------------------
1 |
4 | */
5 |
6 | namespace App\Providers;
7 |
8 | use App\Foundation\ServiceProvider;
9 | use Phalcon\Mvc\View\Engine\Php;
10 | use Phalcon\Mvc\View\Engine\Volt;
11 | use Phalcon\Mvc\View\Simple;
12 |
13 | /**
14 | * Runs only in web environment
15 | * @package App\Providers
16 | */
17 | class WebServiceProvider extends ServiceProvider
18 | {
19 | /**
20 | * Register any application services.
21 | *
22 | * @return void
23 | */
24 | protected function register()
25 | {
26 | $this->di->set('view', function () {
27 | $view = new Simple();
28 | $view->setViewsDir(VIEW_PATH.'/');
29 | $view->registerEngines([
30 | '.phtml' => Php::class,
31 | '.volt' => function ($view, $di) {
32 | $volt = new Volt($view, $di);
33 |
34 | $volt->setOptions([
35 | 'compiledPath' => STORAGE_PATH.'/framework/views/',
36 | ]);
37 |
38 | return $volt;
39 | },
40 | ]);
41 |
42 | return $view;
43 | });
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/public/index.php:
--------------------------------------------------------------------------------
1 |
4 | */
5 |
6 | use App\Foundation\Application;
7 | use App\Providers\AppServiceProvider;
8 | use App\Providers\WebServiceProvider;
9 | use Fabfuel\Prophiler\Aggregator\Cache\CacheAggregator;
10 | use Fabfuel\Prophiler\Aggregator\Database\QueryAggregator;
11 | use Fabfuel\Prophiler\DataCollector\Request;
12 | use Fabfuel\Prophiler\Profiler;
13 | use Fabfuel\Prophiler\Toolbar;
14 | use Phalcon\Di;
15 | use Phalcon\Di\FactoryDefault;
16 | use Phalcon\Mvc\Micro;
17 |
18 | require '../bootstrap/autoload.php';
19 |
20 | /*
21 | * Inject Dependencies
22 | */
23 | $di = new FactoryDefault;
24 |
25 | Di::setDefault($di);
26 |
27 | /** @var Application $app */
28 | $app = require ROOT.'/bootstrap/app.php';
29 |
30 | $app->setDi();
31 |
32 | $debug = $di->get('config')->debug;
33 | $doProfile = class_exists(Profiler::class);
34 |
35 | if ($debug) {
36 | if ($doProfile) {
37 | $profiler = new Profiler();
38 | $profiler->addAggregator(new QueryAggregator());
39 | $profiler->addAggregator(new CacheAggregator());
40 | }
41 | }
42 |
43 | $app->registerServiceProviders([
44 | AppServiceProvider::class,
45 | WebServiceProvider::class,
46 | ]);
47 |
48 | /*
49 | * Bootstrap app
50 | */
51 | $micro = new Micro();
52 | $micro->setDI($di);
53 | $micro->setEventsManager($di->get('eventsManager'));
54 |
55 | require ROOT.'/app/routes.php';
56 |
57 | $micro->handle();
58 |
59 | /*
60 | * Get profiler
61 | */
62 | if (!defined('DONT_PROFILE') && $debug && $doProfile) {
63 | $toolbar = new Toolbar($profiler);
64 | $toolbar->addDataCollector(new Request());
65 | echo $toolbar->render();
66 | }
--------------------------------------------------------------------------------
/console:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env php
2 |
5 | */
6 |
7 | use App\Foundation\Application;
8 | use App\Providers\AppServiceProvider;
9 | use App\Providers\ConsoleServiceProvider;
10 | use Phalcon\CLI\Console as ConsoleApp;
11 | use Phalcon\Config;
12 | use Phalcon\Di;
13 | use Phalcon\Di\FactoryDefault\Cli;
14 |
15 | /*
16 | * Register the autoloader and
17 | * tell it to register the tasks directory
18 | */
19 | $loader = require 'bootstrap/autoload.php';
20 |
21 | $loader->registerDirs(
22 | [
23 | ROOT.'/app/Console',
24 | ]
25 | );
26 | $loader->register();
27 |
28 | require APP_PATH.'/console-helpers.php';
29 |
30 | /*
31 | * Inject dependencies
32 | */
33 | $di = new CLI;
34 |
35 | Di::setDefault($di);
36 |
37 | /** @var Application $app */
38 | $app = require ROOT.'/bootstrap/app.php';
39 |
40 | $app->setDi();
41 |
42 | $di->get('config')
43 | ->merge(new Config(
44 | require CONFIG_PATH.'/console.php'
45 | ));
46 |
47 | $app->registerServiceProviders([
48 | AppServiceProvider::class,
49 | ConsoleServiceProvider::class,
50 | ]);
51 |
52 | /*
53 | * Create a console application
54 | */
55 | $console = new ConsoleApp();
56 | $console->setDI($di);
57 |
58 | $di->setShared('console', $console);
59 |
60 | /**
61 | * Process the console arguments
62 | */
63 | $arguments = [];
64 | foreach ($argv as $k => $arg) {
65 | if ($k == 1) {
66 | $arguments['task'] = $arg;
67 | } elseif ($k == 2) {
68 | $arguments['action'] = $arg;
69 | } elseif ($k >= 3) {
70 | $arguments['params'][] = $arg;
71 | }
72 | }
73 |
74 | /*
75 | * Define global constants for the current task and action
76 | */
77 | define('CURRENT_TASK', (isset($argv[1]) ? $argv[1] : null));
78 | define('CURRENT_ACTION', (isset($argv[2]) ? $argv[2] : null));
79 |
80 | /*
81 | * Handle incoming arguments
82 | */
83 | try {
84 | $console->handle($arguments);
85 | } catch (\Phalcon\Exception $e) {
86 | echo $e->getMessage();
87 | exit(255);
88 | }
--------------------------------------------------------------------------------
/app/helpers.php:
--------------------------------------------------------------------------------
1 |
4 | */
5 | use Phalcon\Config;
6 | use Phalcon\Di;
7 | use Phalcon\Http\Response;
8 |
9 | /**
10 | * Get the available container instance.
11 | *
12 | * @param string $make
13 | * @param array $parameters
14 | * @return mixed|Di
15 | * @throws Phalcon\Di\Exception
16 | */
17 | function app($make = null, array $parameters = null)
18 | {
19 | $di = Di::getDefault();
20 |
21 | if (is_null($make)) {
22 | return $di;
23 | }
24 |
25 | return $di->get($make, $parameters);
26 | }
27 |
28 | /**
29 | * Get / set the specified configuration value.
30 | *
31 | * If an array is passed as the key, we will assume you want to set an array of values.
32 | *
33 | * @param string $key
34 | * @return mixed|Config
35 | */
36 | function config($key = null)
37 | {
38 | if (is_null($key)) {
39 | return app('config');
40 | }
41 |
42 | return app('config')->get($key);
43 | }
44 |
45 | /**
46 | * Return an Http Exception
47 | *
48 | * @param int $code
49 | * @param string $message
50 | * @return Response
51 | */
52 | function abort($code, $message = '')
53 | {
54 | /** @var Response $response */
55 | $response = app('response');
56 |
57 | if ($code == 404) {
58 | $response->setStatusCode($code, 'Not Found');
59 | $response->setContent($message ?: 'This is crazy, but this page was not found!'.PHP_EOL);
60 | } else {
61 | $response->setStatusCode($code);
62 |
63 | if ($message) {
64 | $response->setContent($message);
65 | }
66 | }
67 |
68 | return $response;
69 | }
70 |
71 | /**
72 | * Get / set the specified session value.
73 | *
74 | * If an array is passed as the key, we will assume you want to set an array of values.
75 | *
76 | * @param array|string $key
77 | * @param mixed $default
78 | * @return mixed
79 | */
80 | function session($key = null, $default = null)
81 | {
82 | if (is_null($key)) {
83 | return app('session');
84 | }
85 |
86 | if (is_array($key)) {
87 | return app('session')->set(key($key), current($key));
88 | }
89 |
90 | return app('session')->get($key, $default);
91 | }
--------------------------------------------------------------------------------
/app/Foundation/Application.php:
--------------------------------------------------------------------------------
1 |
4 | */
5 |
6 | namespace App\Foundation;
7 |
8 | use Phalcon\Config;
9 | use Phalcon\Di;
10 | use Phalcon\Logger\Adapter\File as FileAdapter;
11 |
12 | class Application
13 | {
14 | /**
15 | * The Lightning framework version.
16 | *
17 | * @var string
18 | */
19 | const VERSION = '0.1.0';
20 |
21 | /**
22 | * @var \Phalcon\DiInterface
23 | */
24 | protected $di;
25 | protected $config;
26 |
27 | public function __construct()
28 | {
29 | $this->config = new Config(array_replace_recursive(
30 | require CONFIG_PATH.'/config.php',
31 | require ROOT.'/_'
32 | ));
33 |
34 | /** @noinspection PhpUndefinedFieldInspection */
35 | date_default_timezone_set($this->config->timezone);
36 | }
37 |
38 | /**
39 | * @param \Phalcon\DiInterface $di
40 | */
41 | public function setDi($di = null)
42 | {
43 | if (!$di) {
44 | $di = Di::getDefault();
45 | }
46 |
47 | $di->set('config', $this->config);
48 |
49 | $this->di = $di;
50 | }
51 |
52 | public function di()
53 | {
54 | return $this->di;
55 | }
56 |
57 | public function registerExceptionHandler()
58 | {
59 | // Global error handler & logger
60 | register_shutdown_function(function () {
61 | if (!is_null($error = error_get_last())) {
62 |
63 | /** @noinspection PhpUndefinedFieldInspection */
64 | if (!$this->config->debug && $error['type'] >= E_NOTICE) {
65 | return;
66 | }
67 |
68 | $logger = new FileAdapter(ROOT.'/storage/logs/error.log');
69 |
70 | $logger->error(print_r($error, true));
71 | }
72 | });
73 |
74 | // Report errors in debug mode only
75 | /** @noinspection PhpUndefinedFieldInspection */
76 | if (!$this->config->debug) {
77 | error_reporting(0);
78 | }
79 | }
80 |
81 | /**
82 | * Register all of the service providers.
83 | * @param array $providers
84 | * @return void
85 | */
86 | public function registerServiceProviders(array $providers)
87 | {
88 | foreach ($providers as $provider) {
89 | $provider = new $provider($this->di, $this->config);
90 | /** @noinspection PhpUndefinedMethodInspection */
91 | $this->di = $provider->inject();
92 | }
93 | }
94 |
95 |
96 | }
--------------------------------------------------------------------------------
/app/Providers/AppServiceProvider.php:
--------------------------------------------------------------------------------
1 |
4 | */
5 |
6 | namespace App\Providers;
7 |
8 | use App\Foundation\ServiceProvider;
9 | use Exception;
10 | use Illuminate\Container\Container;
11 | use Illuminate\Database\Capsule\Manager as Capsule;
12 | use Illuminate\Events\Dispatcher;
13 | use Phalcon\Cache\Backend\File as BackFile;
14 | use Phalcon\Cache\Backend\Libmemcached as BackMemCached;
15 | use Phalcon\Cache\Frontend\Data as FrontData;
16 | use Phalcon\Cache\Frontend\Output as FrontOutput;
17 | use Phalcon\Db\Adapter\Pdo\Mysql;
18 |
19 | /**
20 | * This will always run
21 | * @package App\Providers
22 | */
23 | class AppServiceProvider extends ServiceProvider
24 | {
25 | /**
26 | * Register any application services.
27 | *
28 | * @return void
29 | */
30 | protected function register()
31 | {
32 | $this->registerCache();
33 | $this->registerDatabase();
34 | }
35 |
36 | protected function registerCache()
37 | {
38 | $this->di->set('cache', function () {
39 | $config = config('cache');
40 |
41 | switch ($config->driver) {
42 | case 'memcached':
43 | $cache = new BackMemCached(
44 | new FrontData(["lifetime" => 7 * 24 * 3600]),
45 | ["servers" => $config->memcached->toArray()]
46 | );
47 | break;
48 | case 'file':
49 | $cache = new BackFile(
50 | new FrontOutput(["lifetime" => 6 * 3600]),
51 | ['cacheDir' => $config->file->dir]
52 | );
53 | break;
54 | default:
55 | throw new Exception('no cache driver defined.');
56 | }
57 |
58 | return $cache;
59 | });
60 | }
61 |
62 | protected function registerDatabase()
63 | {
64 | $config = config('database');
65 |
66 | if ($config->eloquent) {
67 | $capsule = new Capsule;
68 |
69 | $capsule->addConnection([
70 | 'driver' => 'mysql',
71 | 'host' => $config->mysql->host,
72 | 'database' => $config->mysql->dbname,
73 | 'username' => $config->mysql->username,
74 | 'password' => $config->mysql->password,
75 | 'charset' => 'utf8',
76 | 'collation' => 'utf8_unicode_ci',
77 | 'prefix' => $config->mysql->prefix,
78 | ]);
79 |
80 | $capsule->setEventDispatcher(new Dispatcher(new Container));
81 | $capsule->setAsGlobal();
82 | $capsule->bootEloquent();
83 |
84 | $this->di->set('eloquent', $capsule, true);
85 | } else {
86 | $this->di->set('db', function () use ($config) {
87 | $connection = new Mysql($config->mysql->toArray());
88 |
89 | return $connection;
90 | });
91 | }
92 | }
93 | }
94 |
--------------------------------------------------------------------------------
/tests/TestCase.php:
--------------------------------------------------------------------------------
1 |
4 | */
5 |
6 | use App\Foundation\Application;
7 | use App\Providers\AppServiceProvider;
8 | use Phalcon\Config;
9 | use Phalcon\Di;
10 | use Phalcon\Di\FactoryDefault;
11 | use Phalcon\Escaper;
12 | use Phalcon\Loader;
13 | use Phalcon\Mvc\Application as PhApplication;
14 | use Phalcon\Mvc\Dispatcher as PhDispatcher;
15 | use Phalcon\Mvc\Micro;
16 | use Phalcon\Mvc\Model\Manager as PhModelManager;
17 | use Phalcon\Mvc\Url;
18 | use Phalcon\Test\FunctionalTestCase;
19 |
20 | abstract class TestCase extends FunctionalTestCase
21 | {
22 | private $_loaded = false;
23 |
24 | public function setUp()
25 | {
26 | $this->checkExtension('phalcon');
27 |
28 | $this->bootstrap();
29 |
30 | $this->setupUnitTest();
31 | $this->setupModelTest();
32 | $this->setupFunctionalTest();
33 |
34 | $this->_loaded = true;
35 | }
36 |
37 | protected function bootstrap()
38 | {
39 | ini_set('display_errors', 1);
40 | error_reporting(E_ALL);
41 |
42 | $loader = new Loader();
43 | $loader->registerDirs([
44 | ROOT.'/tests/',
45 | ]);
46 |
47 | // Reset the DI container
48 | Di::reset();
49 | Di::setDefault(new Di\FactoryDefault);
50 |
51 | /** @var Application $app */
52 | $app = require ROOT.'/bootstrap/app.php';
53 |
54 | $app->setDi();
55 | $app->registerServiceProviders([
56 | AppServiceProvider::class,
57 | ]);
58 |
59 | $this->di = $app->di();
60 | }
61 |
62 | protected function setupUnitTest()
63 | {
64 | // Set the URL
65 | $this->di->set(
66 | 'url',
67 | function () {
68 | $url = new Url();
69 | $url->setBaseUri('/');
70 |
71 | return $url;
72 | }
73 | );
74 |
75 | $this->di->set(
76 | 'escaper',
77 | function () {
78 | return new Escaper();
79 | }
80 | );
81 | }
82 |
83 | protected function setupModelTest()
84 | {
85 | // Set Models manager
86 | $this->di->set(
87 | 'modelsManager',
88 | function () {
89 | return new PhModelManager();
90 | }
91 | );
92 |
93 | // Set Models metadata
94 | $this->di->set(
95 | 'modelsMetadata',
96 | function () {
97 | /** @noinspection PhpUndefinedClassInspection */
98 | return new PhMetadataMemory();
99 | }
100 | );
101 | }
102 |
103 | protected function setupFunctionalTest()
104 | {
105 | // Set the dispatcher
106 | $this->di->setShared(
107 | 'dispatcher',
108 | function () {
109 | $dispatcher = new PhDispatcher();
110 | $dispatcher->setControllerName('test');
111 | $dispatcher->setActionName('empty');
112 | $dispatcher->setParams([]);
113 |
114 | return $dispatcher;
115 | }
116 | );
117 |
118 | $this->application = new PhApplication($this->di);
119 | }
120 |
121 | /**
122 | * Check if the test case is setup properly
123 | * @throws \PHPUnit_Framework_IncompleteTestError;
124 | */
125 | public function __destruct()
126 | {
127 | if (!$this->_loaded) {
128 | throw new \PHPUnit_Framework_IncompleteTestError('Please run parent::setUp().');
129 | }
130 | }
131 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Lightning (PHP Framework)
2 |
3 | Lightning 是一个建立在 Phalcon 之上的高性能框架,专为 Web 艺术家打造。她考虑了常见的 Web 业务需求,七十二变可大可小——既可用于开发CMS之类的大型系统,也适用于规模较小的 API 接口、微服务。
4 |
5 | Lightning is a high performance framework that sits on top of Phalcon. It's for web artisans. In consideration of the popular Web business needs, Lightning is so flexible that is capable of the development of large systems (CMS, etc) or smaller systems (API services, micro-services, etc)
6 |
7 | > We believe development must be an enjoyable, creative experience to be
8 | > truly fulfilling. Laravel attempts to take the pain out of development
9 | > by easing common tasks used in the majority of web projects.
10 | >
11 | > *by Laravel*
12 |
13 | Laravel 有一个高性能版本的微框架叫作 Lumen ,虽然在纯PHP框架当中它算是比较快的框架了,但这还远远不够。Lightning 致力于打造出一个有着优雅语法的全栈框架。很多灵感来自于 Laravel ,也许你会发现她挺像 Laravel 的。
14 |
15 | The high performance version of Laravel is Lumen, but it’s not good/fast enough. Lightning is trying to be a fast full-stack framework with elegant syntax. Laravel gave me a lot of inspiration, so you may find she a bit like Laravel.
16 |
17 | ### 亮点 Features
18 |
19 | - 为高性能而生
20 | - Optimized for high performance
21 | - 魚*(优雅)*和熊掌*(性能)*亦可兼得
22 | - Maintaining elegance without sacrificing performance
23 | - 现代化工具,奇妙的开发之旅
24 | - Modern toolkit, pinch of magic
25 | - 来自 Laravel 的数据迁移器和结构生成器
26 | - Laravel's database agnostic migrations and schema builder
27 | - 由 Laravel Elixir 提供的用于定义 Gulp任务的简洁、流畅的API
28 | - Laravel Elixir provides a clean, fluent API for defining basic Gulp tasks.
29 | - 实用的辅助函数
30 | - Useful helper functions
31 | - *有时间再写……*
32 | - *More to write...*
33 |
34 | ### 环境要求 Requirements
35 |
36 | - PHP >= 5.5
37 | - Phalcon PHP Extension
38 |
39 |
40 | ### 文档 Documentation
41 |
42 | **安装 Installation**
43 |
44 | Lightning 使用 Composer 来管理依赖包。因此,在使用之前,请确保你已经安装了 Composer ,然后执行命令:
45 |
46 | Lightning utilizes Composer to manage its dependencies. So, before using Lightning, make sure you have Composer installed, and execute the following command:
47 |
48 | composer install
49 |
50 | **应用配置 Application Configuration**
51 |
52 | Lightning 框架所用的配置文件存放在 config 目录下,请通读配置文件以熟悉可用的配置项。
53 |
54 | All of the configuration files for the Lightning framework are stored in the config directory. Feel free to look through the files and get familiar with the options available to you.
55 |
56 | **环境配置 Environment Configuration**
57 |
58 | 通常应用程序需要根据不同的运行环境加载不同的配置信息。例如,你可能希望本机开发环境与生产服务器环境使用不同的缓存驱动。通过环境配置文件,就可以轻松完成。
59 |
60 | It is often helpful to have different configuration values based on the environment the application is running in. For example, you may wish to use a different cache driver locally than you do on your production server. It's easy using environment based configuration.
61 |
62 | 为了简化配置,Lightning 使用“单下划线”文件来表示环境配置。在全新安装的 Lightning 中,应用程序的根目录下都会有一个 `_example.php` 文件。这是环境配置的示例文件,在运行 Lightning 之前请将其手动重命名为单下划线: `_`
63 |
64 | To make this a cinch, Lightning uses the single underscore file to represent the environment configuration. In a fresh Lightning installation, the root directory of your application will contain a `_example.php` file. This is a sample environment configuration file, you should rename it to `_` manually before running the application.
65 |
66 | `_` 文件不应该和应用程序的源码一起被提交到源码仓库中,因为每个开发环境 / 服务器环境可能需要不同的环境配置。如果你们是一个开发团队,可能希望将 `_example.php` 文件包含到源码中。
67 |
68 | Your `_` file should not be committed to your application's source control, since each developer / server using your application could require a different environment configuration. If you are developing with a team, you may wish to continue including a `_example.php` file with your application.
69 |
70 | **HTTP路由 HTTP Routing**
71 |
72 | Lightning 的路由基于 Phalcon 的路由模块,用法也是相同的。你可以在 `app/routes.php` 中定义应用程序的路由。
73 |
74 | HTTP Routing is based on Phalcon's router component. Their usage is the same. You will define routes for your application in the `app/routes.php` file.
75 |
76 | **HTTP 控制器 HTTP Controllers**
77 |
78 | 除了在单一的 routes.php 文件中定义所有的请求处理逻辑,你可能希望使用控制器类来组织这些逻辑。控制器一般存放在 `app/Controllers` 目录下,类名一般以 `Controller` 为后缀。
79 |
80 | Instead of defining all of your request handling logic in a single `routes.php` file, you may wish to organize this behavior using Controller classes. Controllers are stored in the `app/Controllers` directory, and generally named with the suffix `Controller`.
81 |
82 | **服务提供者 Service Providers**
83 |
84 | 服务提供者是 Lightning 应用程序启动的中心所在。我们所说的 “启动” 指的是什么?一般而言,我们指的是注册事物,比如注册服务容器绑定。
85 |
86 | Service providers are the central place of Lightning application bootstrapping. What do we mean by "bootstrapped"? In general, we mean registering things, for example, registering service container bindings.
87 |
88 | 但与其它框架不同的是,出于对性能优化的考虑,Lightning 中每个服务提供者都有其特定用途。
89 |
90 | But, being different from other frameworks, each service provider in Lightning has its specific purpose, out of consideration for performance optimization.
91 |
92 | 服务提供者存放在 `app/Providers` 目录下,类名一般以 `ServiceProvider` 为后缀。
93 |
94 | Service providers are stored in the `app/Providers` directory, and generally named with the suffix `ServiceProvider`.
95 |
96 | **视图 Views**
97 |
98 | 视图包含你应用程序所用到的 HTML,它能够有效分离应用程序的显示逻辑与控制逻辑。视图存放在 `resources/views` 目录下。
99 |
100 | Views contain the HTML served by your application and separate your controller / application logic from your presentation logic. Views are stored in the `resources/views` directory.
101 |
102 | Lightning 集成了 Phalcon 的 Simple View 组件。出于对性能的考虑,建议使用 AngularJS / Jade 之类的技术代替服务端模板渲染
103 |
104 | Lightning integrates Phalcon's Simple View components. In consideration of performance, instead of server-side template rendering, it is recommended to use front-end technology such as AngularJS, Jade
105 |
106 | ### 许可 License
107 |
108 | Lightning 框架是为基于 Apache 2.0 许可发布的开源软件。详情请阅 LICENSE 文件。
109 |
110 | The Lightning framework is open-sourced software licensed under the Apache 2.0 license. See the LICENSE file for more.
111 |
112 | ### 帮助翻译 Translation
113 |
114 | 英文都是谷歌翻译的*(其实是不敢承认是自己译的)*,欢迎协助翻译或纠正错误
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "{}"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright {yyyy} {name of copyright owner}
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/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 | "hash": "8e9ae5b6ab1c135a6f9882ff897ed9ee",
8 | "content-hash": "8b6ff1364621d6e376ecb279fea38c1d",
9 | "packages": [
10 | {
11 | "name": "doctrine/inflector",
12 | "version": "v1.1.0",
13 | "source": {
14 | "type": "git",
15 | "url": "https://github.com/doctrine/inflector.git",
16 | "reference": "90b2128806bfde671b6952ab8bea493942c1fdae"
17 | },
18 | "dist": {
19 | "type": "zip",
20 | "url": "http://packagist.phpcomposer.com/files/doctrine/inflector/90b2128806bfde671b6952ab8bea493942c1fdae.zip",
21 | "reference": "90b2128806bfde671b6952ab8bea493942c1fdae",
22 | "shasum": ""
23 | },
24 | "require": {
25 | "php": ">=5.3.2"
26 | },
27 | "require-dev": {
28 | "phpunit/phpunit": "4.*"
29 | },
30 | "type": "library",
31 | "extra": {
32 | "branch-alias": {
33 | "dev-master": "1.1.x-dev"
34 | }
35 | },
36 | "autoload": {
37 | "psr-0": {
38 | "Doctrine\\Common\\Inflector\\": "lib/"
39 | }
40 | },
41 | "notification-url": "https://packagist.org/downloads/",
42 | "license": [
43 | "MIT"
44 | ],
45 | "authors": [
46 | {
47 | "name": "Roman Borschel",
48 | "email": "roman@code-factory.org"
49 | },
50 | {
51 | "name": "Benjamin Eberlei",
52 | "email": "kontakt@beberlei.de"
53 | },
54 | {
55 | "name": "Guilherme Blanco",
56 | "email": "guilhermeblanco@gmail.com"
57 | },
58 | {
59 | "name": "Jonathan Wage",
60 | "email": "jonwage@gmail.com"
61 | },
62 | {
63 | "name": "Johannes Schmitt",
64 | "email": "schmittjoh@gmail.com"
65 | }
66 | ],
67 | "description": "Common String Manipulations with regard to casing and singular/plural rules.",
68 | "homepage": "http://www.doctrine-project.org",
69 | "keywords": [
70 | "inflection",
71 | "pluralize",
72 | "singularize",
73 | "string"
74 | ],
75 | "time": "2015-11-06 14:35:42"
76 | },
77 | {
78 | "name": "fabfuel/prophiler",
79 | "version": "1.5.0",
80 | "source": {
81 | "type": "git",
82 | "url": "https://github.com/fabfuel/prophiler.git",
83 | "reference": "bd0746ce5317167193c1d0ff4ae5e1486dcc846a"
84 | },
85 | "dist": {
86 | "type": "zip",
87 | "url": "https://packagist.phpcomposer.com/files/fabfuel/prophiler/bd0746ce5317167193c1d0ff4ae5e1486dcc846a.zip",
88 | "reference": "bd0746ce5317167193c1d0ff4ae5e1486dcc846a",
89 | "shasum": ""
90 | },
91 | "require": {
92 | "php": "~5.4",
93 | "psr/log": "~1.0"
94 | },
95 | "require-dev": {
96 | "container-interop/container-interop": "^1.1",
97 | "doctrine/orm": "~2.4",
98 | "elasticsearch/elasticsearch": "~1.3",
99 | "erusev/parsedown": "~1.5",
100 | "fabfuel/mongo": "~0.4",
101 | "phalcon/devtools": "1.3.*@dev",
102 | "phpmd/phpmd": "~1.0",
103 | "phpunit/phpunit": "~4.0",
104 | "squizlabs/php_codesniffer": "~1.0"
105 | },
106 | "suggest": {
107 | "fabfuel/mongo": "ORM for Mongo, supports lazy loading, object references, subdocument classes and their collections.",
108 | "phalcon/devtools": "This tools provide you useful scripts, helping to develop applications that use with Phalcon."
109 | },
110 | "type": "library",
111 | "autoload": {
112 | "psr-0": {
113 | "Fabfuel\\Prophiler\\": "src/"
114 | },
115 | "classmap": [
116 | "tests/"
117 | ]
118 | },
119 | "notification-url": "https://packagist.org/downloads/",
120 | "license": [
121 | "BSD-3-Clause"
122 | ],
123 | "authors": [
124 | {
125 | "name": "Fabian Fuelling",
126 | "email": "fabian@fabfuel.de"
127 | }
128 | ],
129 | "description": "PHP Profiler & Developer Toolbar built for Phalcon",
130 | "time": "2015-10-25 19:15:04"
131 | },
132 | {
133 | "name": "illuminate/container",
134 | "version": "v5.2.26",
135 | "source": {
136 | "type": "git",
137 | "url": "https://github.com/illuminate/container.git",
138 | "reference": "1e156f8017490f5583ab161030bf839c77c95e54"
139 | },
140 | "dist": {
141 | "type": "zip",
142 | "url": "https://packagist.phpcomposer.com/files/illuminate/container/1e156f8017490f5583ab161030bf839c77c95e54.zip",
143 | "reference": "1e156f8017490f5583ab161030bf839c77c95e54",
144 | "shasum": ""
145 | },
146 | "require": {
147 | "illuminate/contracts": "5.2.*",
148 | "php": ">=5.5.9"
149 | },
150 | "type": "library",
151 | "extra": {
152 | "branch-alias": {
153 | "dev-master": "5.2-dev"
154 | }
155 | },
156 | "autoload": {
157 | "psr-4": {
158 | "Illuminate\\Container\\": ""
159 | }
160 | },
161 | "notification-url": "https://packagist.org/downloads/",
162 | "license": [
163 | "MIT"
164 | ],
165 | "authors": [
166 | {
167 | "name": "Taylor Otwell",
168 | "email": "taylorotwell@gmail.com"
169 | }
170 | ],
171 | "description": "The Illuminate Container package.",
172 | "homepage": "http://laravel.com",
173 | "time": "2016-03-16 17:19:17"
174 | },
175 | {
176 | "name": "illuminate/contracts",
177 | "version": "v5.2.26",
178 | "source": {
179 | "type": "git",
180 | "url": "https://github.com/illuminate/contracts.git",
181 | "reference": "411b851962c211078ade7664a6976e77a78cd2a5"
182 | },
183 | "dist": {
184 | "type": "zip",
185 | "url": "https://packagist.phpcomposer.com/files/illuminate/contracts/411b851962c211078ade7664a6976e77a78cd2a5.zip",
186 | "reference": "411b851962c211078ade7664a6976e77a78cd2a5",
187 | "shasum": ""
188 | },
189 | "require": {
190 | "php": ">=5.5.9"
191 | },
192 | "type": "library",
193 | "extra": {
194 | "branch-alias": {
195 | "dev-master": "5.2-dev"
196 | }
197 | },
198 | "autoload": {
199 | "psr-4": {
200 | "Illuminate\\Contracts\\": ""
201 | }
202 | },
203 | "notification-url": "https://packagist.org/downloads/",
204 | "license": [
205 | "MIT"
206 | ],
207 | "authors": [
208 | {
209 | "name": "Taylor Otwell",
210 | "email": "taylorotwell@gmail.com"
211 | }
212 | ],
213 | "description": "The Illuminate Contracts package.",
214 | "homepage": "http://laravel.com",
215 | "time": "2016-03-07 20:37:17"
216 | },
217 | {
218 | "name": "illuminate/database",
219 | "version": "v5.2.26",
220 | "source": {
221 | "type": "git",
222 | "url": "https://github.com/illuminate/database.git",
223 | "reference": "96dfde902ed1279fba22055ff2b0152f57a4d9c6"
224 | },
225 | "dist": {
226 | "type": "zip",
227 | "url": "https://packagist.phpcomposer.com/files/illuminate/database/96dfde902ed1279fba22055ff2b0152f57a4d9c6.zip",
228 | "reference": "96dfde902ed1279fba22055ff2b0152f57a4d9c6",
229 | "shasum": ""
230 | },
231 | "require": {
232 | "illuminate/container": "5.2.*",
233 | "illuminate/contracts": "5.2.*",
234 | "illuminate/support": "5.2.*",
235 | "nesbot/carbon": "~1.20",
236 | "php": ">=5.5.9"
237 | },
238 | "suggest": {
239 | "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.4).",
240 | "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).",
241 | "illuminate/console": "Required to use the database commands (5.2.*).",
242 | "illuminate/events": "Required to use the observers with Eloquent (5.2.*).",
243 | "illuminate/filesystem": "Required to use the migrations (5.2.*).",
244 | "illuminate/pagination": "Required to paginate the result set (5.2.*)."
245 | },
246 | "type": "library",
247 | "extra": {
248 | "branch-alias": {
249 | "dev-master": "5.2-dev"
250 | }
251 | },
252 | "autoload": {
253 | "psr-4": {
254 | "Illuminate\\Database\\": ""
255 | }
256 | },
257 | "notification-url": "https://packagist.org/downloads/",
258 | "license": [
259 | "MIT"
260 | ],
261 | "authors": [
262 | {
263 | "name": "Taylor Otwell",
264 | "email": "taylorotwell@gmail.com"
265 | }
266 | ],
267 | "description": "The Illuminate Database package.",
268 | "homepage": "http://laravel.com",
269 | "keywords": [
270 | "database",
271 | "laravel",
272 | "orm",
273 | "sql"
274 | ],
275 | "time": "2016-03-23 13:51:46"
276 | },
277 | {
278 | "name": "illuminate/events",
279 | "version": "v5.2.26",
280 | "source": {
281 | "type": "git",
282 | "url": "https://github.com/illuminate/events.git",
283 | "reference": "5a5e5d72bf3a2d01d8b15e89440026a60bc4a81b"
284 | },
285 | "dist": {
286 | "type": "zip",
287 | "url": "https://packagist.phpcomposer.com/files/illuminate/events/5a5e5d72bf3a2d01d8b15e89440026a60bc4a81b.zip",
288 | "reference": "5a5e5d72bf3a2d01d8b15e89440026a60bc4a81b",
289 | "shasum": ""
290 | },
291 | "require": {
292 | "illuminate/container": "5.2.*",
293 | "illuminate/contracts": "5.2.*",
294 | "illuminate/support": "5.2.*",
295 | "php": ">=5.5.9"
296 | },
297 | "type": "library",
298 | "extra": {
299 | "branch-alias": {
300 | "dev-master": "5.2-dev"
301 | }
302 | },
303 | "autoload": {
304 | "psr-4": {
305 | "Illuminate\\Events\\": ""
306 | }
307 | },
308 | "notification-url": "https://packagist.org/downloads/",
309 | "license": [
310 | "MIT"
311 | ],
312 | "authors": [
313 | {
314 | "name": "Taylor Otwell",
315 | "email": "taylorotwell@gmail.com"
316 | }
317 | ],
318 | "description": "The Illuminate Events package.",
319 | "homepage": "http://laravel.com",
320 | "time": "2016-01-01 01:00:19"
321 | },
322 | {
323 | "name": "illuminate/support",
324 | "version": "v5.2.26",
325 | "source": {
326 | "type": "git",
327 | "url": "https://github.com/illuminate/support.git",
328 | "reference": "f990b9c154b92bfa08dd83e4d792bc807213ab0c"
329 | },
330 | "dist": {
331 | "type": "zip",
332 | "url": "https://packagist.phpcomposer.com/files/illuminate/support/f990b9c154b92bfa08dd83e4d792bc807213ab0c.zip",
333 | "reference": "f990b9c154b92bfa08dd83e4d792bc807213ab0c",
334 | "shasum": ""
335 | },
336 | "require": {
337 | "doctrine/inflector": "~1.0",
338 | "ext-mbstring": "*",
339 | "illuminate/contracts": "5.2.*",
340 | "paragonie/random_compat": "~1.4",
341 | "php": ">=5.5.9"
342 | },
343 | "suggest": {
344 | "illuminate/filesystem": "Required to use the composer class (5.2.*).",
345 | "jeremeamia/superclosure": "Required to be able to serialize closures (~2.2).",
346 | "symfony/polyfill-php56": "Required to use the hash_equals function on PHP 5.5 (~1.0).",
347 | "symfony/process": "Required to use the composer class (2.8.*|3.0.*).",
348 | "symfony/var-dumper": "Improves the dd function (2.8.*|3.0.*)."
349 | },
350 | "type": "library",
351 | "extra": {
352 | "branch-alias": {
353 | "dev-master": "5.2-dev"
354 | }
355 | },
356 | "autoload": {
357 | "psr-4": {
358 | "Illuminate\\Support\\": ""
359 | },
360 | "files": [
361 | "helpers.php"
362 | ]
363 | },
364 | "notification-url": "https://packagist.org/downloads/",
365 | "license": [
366 | "MIT"
367 | ],
368 | "authors": [
369 | {
370 | "name": "Taylor Otwell",
371 | "email": "taylorotwell@gmail.com"
372 | }
373 | ],
374 | "description": "The Illuminate Support package.",
375 | "homepage": "http://laravel.com",
376 | "time": "2016-03-18 20:30:25"
377 | },
378 | {
379 | "name": "league/climate",
380 | "version": "3.2.0",
381 | "source": {
382 | "type": "git",
383 | "url": "https://github.com/thephpleague/climate.git",
384 | "reference": "834cb907c89eb31e2171b68ee25c0ed26c8f34f4"
385 | },
386 | "dist": {
387 | "type": "zip",
388 | "url": "https://packagist.phpcomposer.com/files/thephpleague/climate/834cb907c89eb31e2171b68ee25c0ed26c8f34f4.zip",
389 | "reference": "834cb907c89eb31e2171b68ee25c0ed26c8f34f4",
390 | "shasum": ""
391 | },
392 | "require": {
393 | "php": ">=5.4.0",
394 | "seld/cli-prompt": "~1.0"
395 | },
396 | "require-dev": {
397 | "mikey179/vfsstream": "~1.4",
398 | "mockery/mockery": "dev-master",
399 | "phpunit/phpunit": "~4.6"
400 | },
401 | "type": "library",
402 | "autoload": {
403 | "psr-4": {
404 | "League\\CLImate\\": "src/"
405 | }
406 | },
407 | "notification-url": "https://packagist.org/downloads/",
408 | "license": [
409 | "MIT"
410 | ],
411 | "authors": [
412 | {
413 | "name": "Joe Tannenbaum",
414 | "email": "hey@joe.codes",
415 | "homepage": "http://joe.codes/",
416 | "role": "Developer"
417 | }
418 | ],
419 | "description": "PHP's best friend for the terminal. CLImate allows you to easily output colored text, special formats, and more.",
420 | "keywords": [
421 | "cli",
422 | "colors",
423 | "command",
424 | "php",
425 | "terminal"
426 | ],
427 | "time": "2015-08-13 16:50:51"
428 | },
429 | {
430 | "name": "nesbot/carbon",
431 | "version": "1.21.0",
432 | "source": {
433 | "type": "git",
434 | "url": "https://github.com/briannesbitt/Carbon.git",
435 | "reference": "7b08ec6f75791e130012f206e3f7b0e76e18e3d7"
436 | },
437 | "dist": {
438 | "type": "zip",
439 | "url": "http://packagist.phpcomposer.com/files/briannesbitt/Carbon/7b08ec6f75791e130012f206e3f7b0e76e18e3d7.zip",
440 | "reference": "7b08ec6f75791e130012f206e3f7b0e76e18e3d7",
441 | "shasum": ""
442 | },
443 | "require": {
444 | "php": ">=5.3.0",
445 | "symfony/translation": "~2.6|~3.0"
446 | },
447 | "require-dev": {
448 | "phpunit/phpunit": "~4.0|~5.0"
449 | },
450 | "type": "library",
451 | "autoload": {
452 | "psr-4": {
453 | "Carbon\\": "src/Carbon/"
454 | }
455 | },
456 | "notification-url": "https://packagist.org/downloads/",
457 | "license": [
458 | "MIT"
459 | ],
460 | "authors": [
461 | {
462 | "name": "Brian Nesbitt",
463 | "email": "brian@nesbot.com",
464 | "homepage": "http://nesbot.com"
465 | }
466 | ],
467 | "description": "A simple API extension for DateTime.",
468 | "homepage": "http://carbon.nesbot.com",
469 | "keywords": [
470 | "date",
471 | "datetime",
472 | "time"
473 | ],
474 | "time": "2015-11-04 20:07:17"
475 | },
476 | {
477 | "name": "paragonie/random_compat",
478 | "version": "v1.4.1",
479 | "source": {
480 | "type": "git",
481 | "url": "https://github.com/paragonie/random_compat.git",
482 | "reference": "c7e26a21ba357863de030f0b9e701c7d04593774"
483 | },
484 | "dist": {
485 | "type": "zip",
486 | "url": "https://packagist.phpcomposer.com/files/paragonie/random_compat/c7e26a21ba357863de030f0b9e701c7d04593774.zip",
487 | "reference": "c7e26a21ba357863de030f0b9e701c7d04593774",
488 | "shasum": ""
489 | },
490 | "require": {
491 | "php": ">=5.2.0"
492 | },
493 | "require-dev": {
494 | "phpunit/phpunit": "4.*|5.*"
495 | },
496 | "suggest": {
497 | "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
498 | },
499 | "type": "library",
500 | "autoload": {
501 | "files": [
502 | "lib/random.php"
503 | ]
504 | },
505 | "notification-url": "https://packagist.org/downloads/",
506 | "license": [
507 | "MIT"
508 | ],
509 | "authors": [
510 | {
511 | "name": "Paragon Initiative Enterprises",
512 | "email": "security@paragonie.com",
513 | "homepage": "https://paragonie.com"
514 | }
515 | ],
516 | "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
517 | "keywords": [
518 | "csprng",
519 | "pseudorandom",
520 | "random"
521 | ],
522 | "time": "2016-03-18 20:34:03"
523 | },
524 | {
525 | "name": "psr/log",
526 | "version": "1.0.0",
527 | "source": {
528 | "type": "git",
529 | "url": "https://github.com/php-fig/log.git",
530 | "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b"
531 | },
532 | "dist": {
533 | "type": "zip",
534 | "url": "https://packagist.phpcomposer.com/files/php-fig/log/fe0936ee26643249e916849d48e3a51d5f5e278b.zip",
535 | "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b",
536 | "shasum": ""
537 | },
538 | "type": "library",
539 | "autoload": {
540 | "psr-0": {
541 | "Psr\\Log\\": ""
542 | }
543 | },
544 | "notification-url": "https://packagist.org/downloads/",
545 | "license": [
546 | "MIT"
547 | ],
548 | "authors": [
549 | {
550 | "name": "PHP-FIG",
551 | "homepage": "http://www.php-fig.org/"
552 | }
553 | ],
554 | "description": "Common interface for logging libraries",
555 | "keywords": [
556 | "log",
557 | "psr",
558 | "psr-3"
559 | ],
560 | "time": "2012-12-21 11:40:51"
561 | },
562 | {
563 | "name": "seld/cli-prompt",
564 | "version": "1.0.1",
565 | "source": {
566 | "type": "git",
567 | "url": "https://github.com/Seldaek/cli-prompt.git",
568 | "reference": "b27db1514f7d7bb7a366ad95d4eb2b17140a0691"
569 | },
570 | "dist": {
571 | "type": "zip",
572 | "url": "https://packagist.phpcomposer.com/files/Seldaek/cli-prompt/b27db1514f7d7bb7a366ad95d4eb2b17140a0691.zip",
573 | "reference": "b27db1514f7d7bb7a366ad95d4eb2b17140a0691",
574 | "shasum": ""
575 | },
576 | "require": {
577 | "php": ">=5.3"
578 | },
579 | "type": "library",
580 | "extra": {
581 | "branch-alias": {
582 | "dev-master": "1.x-dev"
583 | }
584 | },
585 | "autoload": {
586 | "psr-4": {
587 | "Seld\\CliPrompt\\": "src/"
588 | }
589 | },
590 | "notification-url": "https://packagist.org/downloads/",
591 | "license": [
592 | "MIT"
593 | ],
594 | "authors": [
595 | {
596 | "name": "Jordi Boggiano",
597 | "email": "j.boggiano@seld.be"
598 | }
599 | ],
600 | "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type",
601 | "keywords": [
602 | "cli",
603 | "console",
604 | "hidden",
605 | "input",
606 | "prompt"
607 | ],
608 | "time": "2016-01-09 17:55:27"
609 | },
610 | {
611 | "name": "symfony/polyfill-mbstring",
612 | "version": "v1.1.1",
613 | "source": {
614 | "type": "git",
615 | "url": "https://github.com/symfony/polyfill-mbstring.git",
616 | "reference": "1289d16209491b584839022f29257ad859b8532d"
617 | },
618 | "dist": {
619 | "type": "zip",
620 | "url": "https://packagist.phpcomposer.com/files/symfony/polyfill-mbstring/1289d16209491b584839022f29257ad859b8532d.zip",
621 | "reference": "1289d16209491b584839022f29257ad859b8532d",
622 | "shasum": ""
623 | },
624 | "require": {
625 | "php": ">=5.3.3"
626 | },
627 | "suggest": {
628 | "ext-mbstring": "For best performance"
629 | },
630 | "type": "library",
631 | "extra": {
632 | "branch-alias": {
633 | "dev-master": "1.1-dev"
634 | }
635 | },
636 | "autoload": {
637 | "psr-4": {
638 | "Symfony\\Polyfill\\Mbstring\\": ""
639 | },
640 | "files": [
641 | "bootstrap.php"
642 | ]
643 | },
644 | "notification-url": "https://packagist.org/downloads/",
645 | "license": [
646 | "MIT"
647 | ],
648 | "authors": [
649 | {
650 | "name": "Nicolas Grekas",
651 | "email": "p@tchwork.com"
652 | },
653 | {
654 | "name": "Symfony Community",
655 | "homepage": "https://symfony.com/contributors"
656 | }
657 | ],
658 | "description": "Symfony polyfill for the Mbstring extension",
659 | "homepage": "https://symfony.com",
660 | "keywords": [
661 | "compatibility",
662 | "mbstring",
663 | "polyfill",
664 | "portable",
665 | "shim"
666 | ],
667 | "time": "2016-01-20 09:13:37"
668 | },
669 | {
670 | "name": "symfony/translation",
671 | "version": "v3.0.3",
672 | "source": {
673 | "type": "git",
674 | "url": "https://github.com/symfony/translation.git",
675 | "reference": "2de0b6f7ebe43cffd8a06996ebec6aab79ea9e91"
676 | },
677 | "dist": {
678 | "type": "zip",
679 | "url": "https://packagist.phpcomposer.com/files/symfony/translation/2de0b6f7ebe43cffd8a06996ebec6aab79ea9e91.zip",
680 | "reference": "2de0b6f7ebe43cffd8a06996ebec6aab79ea9e91",
681 | "shasum": ""
682 | },
683 | "require": {
684 | "php": ">=5.5.9",
685 | "symfony/polyfill-mbstring": "~1.0"
686 | },
687 | "conflict": {
688 | "symfony/config": "<2.8"
689 | },
690 | "require-dev": {
691 | "psr/log": "~1.0",
692 | "symfony/config": "~2.8|~3.0",
693 | "symfony/intl": "~2.8|~3.0",
694 | "symfony/yaml": "~2.8|~3.0"
695 | },
696 | "suggest": {
697 | "psr/log": "To use logging capability in translator",
698 | "symfony/config": "",
699 | "symfony/yaml": ""
700 | },
701 | "type": "library",
702 | "extra": {
703 | "branch-alias": {
704 | "dev-master": "3.0-dev"
705 | }
706 | },
707 | "autoload": {
708 | "psr-4": {
709 | "Symfony\\Component\\Translation\\": ""
710 | },
711 | "exclude-from-classmap": [
712 | "/Tests/"
713 | ]
714 | },
715 | "notification-url": "https://packagist.org/downloads/",
716 | "license": [
717 | "MIT"
718 | ],
719 | "authors": [
720 | {
721 | "name": "Fabien Potencier",
722 | "email": "fabien@symfony.com"
723 | },
724 | {
725 | "name": "Symfony Community",
726 | "homepage": "https://symfony.com/contributors"
727 | }
728 | ],
729 | "description": "Symfony Translation Component",
730 | "homepage": "https://symfony.com",
731 | "time": "2016-02-02 13:44:19"
732 | },
733 | {
734 | "name": "symfony/var-dumper",
735 | "version": "v3.0.3",
736 | "source": {
737 | "type": "git",
738 | "url": "https://github.com/symfony/var-dumper.git",
739 | "reference": "9a6a883c48acb215d4825ce9de61dccf93d62074"
740 | },
741 | "dist": {
742 | "type": "zip",
743 | "url": "https://packagist.phpcomposer.com/files/symfony/var-dumper/9a6a883c48acb215d4825ce9de61dccf93d62074.zip",
744 | "reference": "9a6a883c48acb215d4825ce9de61dccf93d62074",
745 | "shasum": ""
746 | },
747 | "require": {
748 | "php": ">=5.5.9",
749 | "symfony/polyfill-mbstring": "~1.0"
750 | },
751 | "require-dev": {
752 | "twig/twig": "~1.20|~2.0"
753 | },
754 | "suggest": {
755 | "ext-symfony_debug": ""
756 | },
757 | "type": "library",
758 | "extra": {
759 | "branch-alias": {
760 | "dev-master": "3.0-dev"
761 | }
762 | },
763 | "autoload": {
764 | "files": [
765 | "Resources/functions/dump.php"
766 | ],
767 | "psr-4": {
768 | "Symfony\\Component\\VarDumper\\": ""
769 | },
770 | "exclude-from-classmap": [
771 | "/Tests/"
772 | ]
773 | },
774 | "notification-url": "https://packagist.org/downloads/",
775 | "license": [
776 | "MIT"
777 | ],
778 | "authors": [
779 | {
780 | "name": "Nicolas Grekas",
781 | "email": "p@tchwork.com"
782 | },
783 | {
784 | "name": "Symfony Community",
785 | "homepage": "https://symfony.com/contributors"
786 | }
787 | ],
788 | "description": "Symfony mechanism for exploring and dumping PHP variables",
789 | "homepage": "https://symfony.com",
790 | "keywords": [
791 | "debug",
792 | "dump"
793 | ],
794 | "time": "2016-02-13 09:23:44"
795 | }
796 | ],
797 | "packages-dev": [
798 | {
799 | "name": "doctrine/instantiator",
800 | "version": "1.0.5",
801 | "source": {
802 | "type": "git",
803 | "url": "https://github.com/doctrine/instantiator.git",
804 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
805 | },
806 | "dist": {
807 | "type": "zip",
808 | "url": "http://packagist.phpcomposer.com/files/doctrine/instantiator/8e884e78f9f0eb1329e445619e04456e64d8051d.zip",
809 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
810 | "shasum": ""
811 | },
812 | "require": {
813 | "php": ">=5.3,<8.0-DEV"
814 | },
815 | "require-dev": {
816 | "athletic/athletic": "~0.1.8",
817 | "ext-pdo": "*",
818 | "ext-phar": "*",
819 | "phpunit/phpunit": "~4.0",
820 | "squizlabs/php_codesniffer": "~2.0"
821 | },
822 | "type": "library",
823 | "extra": {
824 | "branch-alias": {
825 | "dev-master": "1.0.x-dev"
826 | }
827 | },
828 | "autoload": {
829 | "psr-4": {
830 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
831 | }
832 | },
833 | "notification-url": "https://packagist.org/downloads/",
834 | "license": [
835 | "MIT"
836 | ],
837 | "authors": [
838 | {
839 | "name": "Marco Pivetta",
840 | "email": "ocramius@gmail.com",
841 | "homepage": "http://ocramius.github.com/"
842 | }
843 | ],
844 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
845 | "homepage": "https://github.com/doctrine/instantiator",
846 | "keywords": [
847 | "constructor",
848 | "instantiate"
849 | ],
850 | "time": "2015-06-14 21:17:01"
851 | },
852 | {
853 | "name": "phalcon/incubator",
854 | "version": "v2.0.10",
855 | "source": {
856 | "type": "git",
857 | "url": "https://github.com/phalcon/incubator.git",
858 | "reference": "e040517e0e05046bad7dae5e352b12ac30e28343"
859 | },
860 | "dist": {
861 | "type": "zip",
862 | "url": "https://packagist.phpcomposer.com/files/phalcon/incubator/e040517e0e05046bad7dae5e352b12ac30e28343.zip",
863 | "reference": "e040517e0e05046bad7dae5e352b12ac30e28343",
864 | "shasum": ""
865 | },
866 | "require": {
867 | "ext-phalcon": ">=2.0.4",
868 | "php": ">=5.4",
869 | "swiftmailer/swiftmailer": "~5.2"
870 | },
871 | "require-dev": {
872 | "codeception/aerospike-module": "^0.1",
873 | "codeception/codeception": "^2.1",
874 | "codeception/mockery-module": "^0.2",
875 | "squizlabs/php_codesniffer": "^2.5"
876 | },
877 | "suggest": {
878 | "duncan3dc/fork-helper": "To use extended class to access the beanstalk queue service",
879 | "ext-aerospike": "*"
880 | },
881 | "type": "library",
882 | "autoload": {
883 | "psr-4": {
884 | "Phalcon\\": "Library/Phalcon/"
885 | }
886 | },
887 | "notification-url": "https://packagist.org/downloads/",
888 | "license": [
889 | "BSD-3-Clause"
890 | ],
891 | "authors": [
892 | {
893 | "name": "Phalcon Team",
894 | "email": "team@phalconphp.com"
895 | }
896 | ],
897 | "description": "Adapters, prototypes or functionality that can be potentially incorporated to the C-framework.",
898 | "homepage": "http://phalconphp.com",
899 | "keywords": [
900 | "framework",
901 | "incubator",
902 | "phalcon"
903 | ],
904 | "time": "2016-02-05 19:41:15"
905 | },
906 | {
907 | "name": "phpdocumentor/reflection-docblock",
908 | "version": "2.0.4",
909 | "source": {
910 | "type": "git",
911 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
912 | "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
913 | },
914 | "dist": {
915 | "type": "zip",
916 | "url": "http://packagist.phpcomposer.com/files/phpDocumentor/ReflectionDocBlock/d68dbdc53dc358a816f00b300704702b2eaff7b8.zip",
917 | "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
918 | "shasum": ""
919 | },
920 | "require": {
921 | "php": ">=5.3.3"
922 | },
923 | "require-dev": {
924 | "phpunit/phpunit": "~4.0"
925 | },
926 | "suggest": {
927 | "dflydev/markdown": "~1.0",
928 | "erusev/parsedown": "~1.0"
929 | },
930 | "type": "library",
931 | "extra": {
932 | "branch-alias": {
933 | "dev-master": "2.0.x-dev"
934 | }
935 | },
936 | "autoload": {
937 | "psr-0": {
938 | "phpDocumentor": [
939 | "src/"
940 | ]
941 | }
942 | },
943 | "notification-url": "https://packagist.org/downloads/",
944 | "license": [
945 | "MIT"
946 | ],
947 | "authors": [
948 | {
949 | "name": "Mike van Riel",
950 | "email": "mike.vanriel@naenius.com"
951 | }
952 | ],
953 | "time": "2015-02-03 12:10:50"
954 | },
955 | {
956 | "name": "phpspec/prophecy",
957 | "version": "v1.6.0",
958 | "source": {
959 | "type": "git",
960 | "url": "https://github.com/phpspec/prophecy.git",
961 | "reference": "3c91bdf81797d725b14cb62906f9a4ce44235972"
962 | },
963 | "dist": {
964 | "type": "zip",
965 | "url": "http://packagist.phpcomposer.com/files/phpspec/prophecy/3c91bdf81797d725b14cb62906f9a4ce44235972.zip",
966 | "reference": "3c91bdf81797d725b14cb62906f9a4ce44235972",
967 | "shasum": ""
968 | },
969 | "require": {
970 | "doctrine/instantiator": "^1.0.2",
971 | "php": "^5.3|^7.0",
972 | "phpdocumentor/reflection-docblock": "~2.0",
973 | "sebastian/comparator": "~1.1",
974 | "sebastian/recursion-context": "~1.0"
975 | },
976 | "require-dev": {
977 | "phpspec/phpspec": "~2.0"
978 | },
979 | "type": "library",
980 | "extra": {
981 | "branch-alias": {
982 | "dev-master": "1.5.x-dev"
983 | }
984 | },
985 | "autoload": {
986 | "psr-0": {
987 | "Prophecy\\": "src/"
988 | }
989 | },
990 | "notification-url": "https://packagist.org/downloads/",
991 | "license": [
992 | "MIT"
993 | ],
994 | "authors": [
995 | {
996 | "name": "Konstantin Kudryashov",
997 | "email": "ever.zet@gmail.com",
998 | "homepage": "http://everzet.com"
999 | },
1000 | {
1001 | "name": "Marcello Duarte",
1002 | "email": "marcello.duarte@gmail.com"
1003 | }
1004 | ],
1005 | "description": "Highly opinionated mocking framework for PHP 5.3+",
1006 | "homepage": "https://github.com/phpspec/prophecy",
1007 | "keywords": [
1008 | "Double",
1009 | "Dummy",
1010 | "fake",
1011 | "mock",
1012 | "spy",
1013 | "stub"
1014 | ],
1015 | "time": "2016-02-15 07:46:21"
1016 | },
1017 | {
1018 | "name": "phpunit/php-code-coverage",
1019 | "version": "2.2.4",
1020 | "source": {
1021 | "type": "git",
1022 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
1023 | "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
1024 | },
1025 | "dist": {
1026 | "type": "zip",
1027 | "url": "https://packagist.phpcomposer.com/files/sebastianbergmann/php-code-coverage/eabf68b476ac7d0f73793aada060f1c1a9bf8979.zip",
1028 | "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
1029 | "shasum": ""
1030 | },
1031 | "require": {
1032 | "php": ">=5.3.3",
1033 | "phpunit/php-file-iterator": "~1.3",
1034 | "phpunit/php-text-template": "~1.2",
1035 | "phpunit/php-token-stream": "~1.3",
1036 | "sebastian/environment": "^1.3.2",
1037 | "sebastian/version": "~1.0"
1038 | },
1039 | "require-dev": {
1040 | "ext-xdebug": ">=2.1.4",
1041 | "phpunit/phpunit": "~4"
1042 | },
1043 | "suggest": {
1044 | "ext-dom": "*",
1045 | "ext-xdebug": ">=2.2.1",
1046 | "ext-xmlwriter": "*"
1047 | },
1048 | "type": "library",
1049 | "extra": {
1050 | "branch-alias": {
1051 | "dev-master": "2.2.x-dev"
1052 | }
1053 | },
1054 | "autoload": {
1055 | "classmap": [
1056 | "src/"
1057 | ]
1058 | },
1059 | "notification-url": "https://packagist.org/downloads/",
1060 | "license": [
1061 | "BSD-3-Clause"
1062 | ],
1063 | "authors": [
1064 | {
1065 | "name": "Sebastian Bergmann",
1066 | "email": "sb@sebastian-bergmann.de",
1067 | "role": "lead"
1068 | }
1069 | ],
1070 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
1071 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
1072 | "keywords": [
1073 | "coverage",
1074 | "testing",
1075 | "xunit"
1076 | ],
1077 | "time": "2015-10-06 15:47:00"
1078 | },
1079 | {
1080 | "name": "phpunit/php-file-iterator",
1081 | "version": "1.4.1",
1082 | "source": {
1083 | "type": "git",
1084 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
1085 | "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0"
1086 | },
1087 | "dist": {
1088 | "type": "zip",
1089 | "url": "http://packagist.phpcomposer.com/files/sebastianbergmann/php-file-iterator/6150bf2c35d3fc379e50c7602b75caceaa39dbf0.zip",
1090 | "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
1091 | "shasum": ""
1092 | },
1093 | "require": {
1094 | "php": ">=5.3.3"
1095 | },
1096 | "type": "library",
1097 | "extra": {
1098 | "branch-alias": {
1099 | "dev-master": "1.4.x-dev"
1100 | }
1101 | },
1102 | "autoload": {
1103 | "classmap": [
1104 | "src/"
1105 | ]
1106 | },
1107 | "notification-url": "https://packagist.org/downloads/",
1108 | "license": [
1109 | "BSD-3-Clause"
1110 | ],
1111 | "authors": [
1112 | {
1113 | "name": "Sebastian Bergmann",
1114 | "email": "sb@sebastian-bergmann.de",
1115 | "role": "lead"
1116 | }
1117 | ],
1118 | "description": "FilterIterator implementation that filters files based on a list of suffixes.",
1119 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
1120 | "keywords": [
1121 | "filesystem",
1122 | "iterator"
1123 | ],
1124 | "time": "2015-06-21 13:08:43"
1125 | },
1126 | {
1127 | "name": "phpunit/php-text-template",
1128 | "version": "1.2.1",
1129 | "source": {
1130 | "type": "git",
1131 | "url": "https://github.com/sebastianbergmann/php-text-template.git",
1132 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
1133 | },
1134 | "dist": {
1135 | "type": "zip",
1136 | "url": "http://packagist.phpcomposer.com/files/sebastianbergmann/php-text-template/31f8b717e51d9a2afca6c9f046f5d69fc27c8686.zip",
1137 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
1138 | "shasum": ""
1139 | },
1140 | "require": {
1141 | "php": ">=5.3.3"
1142 | },
1143 | "type": "library",
1144 | "autoload": {
1145 | "classmap": [
1146 | "src/"
1147 | ]
1148 | },
1149 | "notification-url": "https://packagist.org/downloads/",
1150 | "license": [
1151 | "BSD-3-Clause"
1152 | ],
1153 | "authors": [
1154 | {
1155 | "name": "Sebastian Bergmann",
1156 | "email": "sebastian@phpunit.de",
1157 | "role": "lead"
1158 | }
1159 | ],
1160 | "description": "Simple template engine.",
1161 | "homepage": "https://github.com/sebastianbergmann/php-text-template/",
1162 | "keywords": [
1163 | "template"
1164 | ],
1165 | "time": "2015-06-21 13:50:34"
1166 | },
1167 | {
1168 | "name": "phpunit/php-timer",
1169 | "version": "1.0.7",
1170 | "source": {
1171 | "type": "git",
1172 | "url": "https://github.com/sebastianbergmann/php-timer.git",
1173 | "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b"
1174 | },
1175 | "dist": {
1176 | "type": "zip",
1177 | "url": "http://packagist.phpcomposer.com/files/sebastianbergmann/php-timer/3e82f4e9fc92665fafd9157568e4dcb01d014e5b.zip",
1178 | "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b",
1179 | "shasum": ""
1180 | },
1181 | "require": {
1182 | "php": ">=5.3.3"
1183 | },
1184 | "type": "library",
1185 | "autoload": {
1186 | "classmap": [
1187 | "src/"
1188 | ]
1189 | },
1190 | "notification-url": "https://packagist.org/downloads/",
1191 | "license": [
1192 | "BSD-3-Clause"
1193 | ],
1194 | "authors": [
1195 | {
1196 | "name": "Sebastian Bergmann",
1197 | "email": "sb@sebastian-bergmann.de",
1198 | "role": "lead"
1199 | }
1200 | ],
1201 | "description": "Utility class for timing",
1202 | "homepage": "https://github.com/sebastianbergmann/php-timer/",
1203 | "keywords": [
1204 | "timer"
1205 | ],
1206 | "time": "2015-06-21 08:01:12"
1207 | },
1208 | {
1209 | "name": "phpunit/php-token-stream",
1210 | "version": "1.4.8",
1211 | "source": {
1212 | "type": "git",
1213 | "url": "https://github.com/sebastianbergmann/php-token-stream.git",
1214 | "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da"
1215 | },
1216 | "dist": {
1217 | "type": "zip",
1218 | "url": "http://packagist.phpcomposer.com/files/sebastianbergmann/php-token-stream/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da.zip",
1219 | "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da",
1220 | "shasum": ""
1221 | },
1222 | "require": {
1223 | "ext-tokenizer": "*",
1224 | "php": ">=5.3.3"
1225 | },
1226 | "require-dev": {
1227 | "phpunit/phpunit": "~4.2"
1228 | },
1229 | "type": "library",
1230 | "extra": {
1231 | "branch-alias": {
1232 | "dev-master": "1.4-dev"
1233 | }
1234 | },
1235 | "autoload": {
1236 | "classmap": [
1237 | "src/"
1238 | ]
1239 | },
1240 | "notification-url": "https://packagist.org/downloads/",
1241 | "license": [
1242 | "BSD-3-Clause"
1243 | ],
1244 | "authors": [
1245 | {
1246 | "name": "Sebastian Bergmann",
1247 | "email": "sebastian@phpunit.de"
1248 | }
1249 | ],
1250 | "description": "Wrapper around PHP's tokenizer extension.",
1251 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
1252 | "keywords": [
1253 | "tokenizer"
1254 | ],
1255 | "time": "2015-09-15 10:49:45"
1256 | },
1257 | {
1258 | "name": "phpunit/phpunit",
1259 | "version": "4.8.24",
1260 | "source": {
1261 | "type": "git",
1262 | "url": "https://github.com/sebastianbergmann/phpunit.git",
1263 | "reference": "a1066c562c52900a142a0e2bbf0582994671385e"
1264 | },
1265 | "dist": {
1266 | "type": "zip",
1267 | "url": "https://packagist.phpcomposer.com/files/sebastianbergmann/phpunit/a1066c562c52900a142a0e2bbf0582994671385e.zip",
1268 | "reference": "a1066c562c52900a142a0e2bbf0582994671385e",
1269 | "shasum": ""
1270 | },
1271 | "require": {
1272 | "ext-dom": "*",
1273 | "ext-json": "*",
1274 | "ext-pcre": "*",
1275 | "ext-reflection": "*",
1276 | "ext-spl": "*",
1277 | "php": ">=5.3.3",
1278 | "phpspec/prophecy": "^1.3.1",
1279 | "phpunit/php-code-coverage": "~2.1",
1280 | "phpunit/php-file-iterator": "~1.4",
1281 | "phpunit/php-text-template": "~1.2",
1282 | "phpunit/php-timer": ">=1.0.6",
1283 | "phpunit/phpunit-mock-objects": "~2.3",
1284 | "sebastian/comparator": "~1.1",
1285 | "sebastian/diff": "~1.2",
1286 | "sebastian/environment": "~1.3",
1287 | "sebastian/exporter": "~1.2",
1288 | "sebastian/global-state": "~1.0",
1289 | "sebastian/version": "~1.0",
1290 | "symfony/yaml": "~2.1|~3.0"
1291 | },
1292 | "suggest": {
1293 | "phpunit/php-invoker": "~1.1"
1294 | },
1295 | "bin": [
1296 | "phpunit"
1297 | ],
1298 | "type": "library",
1299 | "extra": {
1300 | "branch-alias": {
1301 | "dev-master": "4.8.x-dev"
1302 | }
1303 | },
1304 | "autoload": {
1305 | "classmap": [
1306 | "src/"
1307 | ]
1308 | },
1309 | "notification-url": "https://packagist.org/downloads/",
1310 | "license": [
1311 | "BSD-3-Clause"
1312 | ],
1313 | "authors": [
1314 | {
1315 | "name": "Sebastian Bergmann",
1316 | "email": "sebastian@phpunit.de",
1317 | "role": "lead"
1318 | }
1319 | ],
1320 | "description": "The PHP Unit Testing framework.",
1321 | "homepage": "https://phpunit.de/",
1322 | "keywords": [
1323 | "phpunit",
1324 | "testing",
1325 | "xunit"
1326 | ],
1327 | "time": "2016-03-14 06:16:08"
1328 | },
1329 | {
1330 | "name": "phpunit/phpunit-mock-objects",
1331 | "version": "2.3.8",
1332 | "source": {
1333 | "type": "git",
1334 | "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
1335 | "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
1336 | },
1337 | "dist": {
1338 | "type": "zip",
1339 | "url": "https://packagist.phpcomposer.com/files/sebastianbergmann/phpunit-mock-objects/ac8e7a3db35738d56ee9a76e78a4e03d97628983.zip",
1340 | "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
1341 | "shasum": ""
1342 | },
1343 | "require": {
1344 | "doctrine/instantiator": "^1.0.2",
1345 | "php": ">=5.3.3",
1346 | "phpunit/php-text-template": "~1.2",
1347 | "sebastian/exporter": "~1.2"
1348 | },
1349 | "require-dev": {
1350 | "phpunit/phpunit": "~4.4"
1351 | },
1352 | "suggest": {
1353 | "ext-soap": "*"
1354 | },
1355 | "type": "library",
1356 | "extra": {
1357 | "branch-alias": {
1358 | "dev-master": "2.3.x-dev"
1359 | }
1360 | },
1361 | "autoload": {
1362 | "classmap": [
1363 | "src/"
1364 | ]
1365 | },
1366 | "notification-url": "https://packagist.org/downloads/",
1367 | "license": [
1368 | "BSD-3-Clause"
1369 | ],
1370 | "authors": [
1371 | {
1372 | "name": "Sebastian Bergmann",
1373 | "email": "sb@sebastian-bergmann.de",
1374 | "role": "lead"
1375 | }
1376 | ],
1377 | "description": "Mock Object library for PHPUnit",
1378 | "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
1379 | "keywords": [
1380 | "mock",
1381 | "xunit"
1382 | ],
1383 | "time": "2015-10-02 06:51:40"
1384 | },
1385 | {
1386 | "name": "sebastian/comparator",
1387 | "version": "1.2.0",
1388 | "source": {
1389 | "type": "git",
1390 | "url": "https://github.com/sebastianbergmann/comparator.git",
1391 | "reference": "937efb279bd37a375bcadf584dec0726f84dbf22"
1392 | },
1393 | "dist": {
1394 | "type": "zip",
1395 | "url": "http://packagist.phpcomposer.com/files/sebastianbergmann/comparator/937efb279bd37a375bcadf584dec0726f84dbf22.zip",
1396 | "reference": "937efb279bd37a375bcadf584dec0726f84dbf22",
1397 | "shasum": ""
1398 | },
1399 | "require": {
1400 | "php": ">=5.3.3",
1401 | "sebastian/diff": "~1.2",
1402 | "sebastian/exporter": "~1.2"
1403 | },
1404 | "require-dev": {
1405 | "phpunit/phpunit": "~4.4"
1406 | },
1407 | "type": "library",
1408 | "extra": {
1409 | "branch-alias": {
1410 | "dev-master": "1.2.x-dev"
1411 | }
1412 | },
1413 | "autoload": {
1414 | "classmap": [
1415 | "src/"
1416 | ]
1417 | },
1418 | "notification-url": "https://packagist.org/downloads/",
1419 | "license": [
1420 | "BSD-3-Clause"
1421 | ],
1422 | "authors": [
1423 | {
1424 | "name": "Jeff Welch",
1425 | "email": "whatthejeff@gmail.com"
1426 | },
1427 | {
1428 | "name": "Volker Dusch",
1429 | "email": "github@wallbash.com"
1430 | },
1431 | {
1432 | "name": "Bernhard Schussek",
1433 | "email": "bschussek@2bepublished.at"
1434 | },
1435 | {
1436 | "name": "Sebastian Bergmann",
1437 | "email": "sebastian@phpunit.de"
1438 | }
1439 | ],
1440 | "description": "Provides the functionality to compare PHP values for equality",
1441 | "homepage": "http://www.github.com/sebastianbergmann/comparator",
1442 | "keywords": [
1443 | "comparator",
1444 | "compare",
1445 | "equality"
1446 | ],
1447 | "time": "2015-07-26 15:48:44"
1448 | },
1449 | {
1450 | "name": "sebastian/diff",
1451 | "version": "1.4.1",
1452 | "source": {
1453 | "type": "git",
1454 | "url": "https://github.com/sebastianbergmann/diff.git",
1455 | "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e"
1456 | },
1457 | "dist": {
1458 | "type": "zip",
1459 | "url": "http://packagist.phpcomposer.com/files/sebastianbergmann/diff/13edfd8706462032c2f52b4b862974dd46b71c9e.zip",
1460 | "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e",
1461 | "shasum": ""
1462 | },
1463 | "require": {
1464 | "php": ">=5.3.3"
1465 | },
1466 | "require-dev": {
1467 | "phpunit/phpunit": "~4.8"
1468 | },
1469 | "type": "library",
1470 | "extra": {
1471 | "branch-alias": {
1472 | "dev-master": "1.4-dev"
1473 | }
1474 | },
1475 | "autoload": {
1476 | "classmap": [
1477 | "src/"
1478 | ]
1479 | },
1480 | "notification-url": "https://packagist.org/downloads/",
1481 | "license": [
1482 | "BSD-3-Clause"
1483 | ],
1484 | "authors": [
1485 | {
1486 | "name": "Kore Nordmann",
1487 | "email": "mail@kore-nordmann.de"
1488 | },
1489 | {
1490 | "name": "Sebastian Bergmann",
1491 | "email": "sebastian@phpunit.de"
1492 | }
1493 | ],
1494 | "description": "Diff implementation",
1495 | "homepage": "https://github.com/sebastianbergmann/diff",
1496 | "keywords": [
1497 | "diff"
1498 | ],
1499 | "time": "2015-12-08 07:14:41"
1500 | },
1501 | {
1502 | "name": "sebastian/environment",
1503 | "version": "1.3.5",
1504 | "source": {
1505 | "type": "git",
1506 | "url": "https://github.com/sebastianbergmann/environment.git",
1507 | "reference": "dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf"
1508 | },
1509 | "dist": {
1510 | "type": "zip",
1511 | "url": "http://packagist.phpcomposer.com/files/sebastianbergmann/environment/dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf.zip",
1512 | "reference": "dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf",
1513 | "shasum": ""
1514 | },
1515 | "require": {
1516 | "php": ">=5.3.3"
1517 | },
1518 | "require-dev": {
1519 | "phpunit/phpunit": "~4.4"
1520 | },
1521 | "type": "library",
1522 | "extra": {
1523 | "branch-alias": {
1524 | "dev-master": "1.3.x-dev"
1525 | }
1526 | },
1527 | "autoload": {
1528 | "classmap": [
1529 | "src/"
1530 | ]
1531 | },
1532 | "notification-url": "https://packagist.org/downloads/",
1533 | "license": [
1534 | "BSD-3-Clause"
1535 | ],
1536 | "authors": [
1537 | {
1538 | "name": "Sebastian Bergmann",
1539 | "email": "sebastian@phpunit.de"
1540 | }
1541 | ],
1542 | "description": "Provides functionality to handle HHVM/PHP environments",
1543 | "homepage": "http://www.github.com/sebastianbergmann/environment",
1544 | "keywords": [
1545 | "Xdebug",
1546 | "environment",
1547 | "hhvm"
1548 | ],
1549 | "time": "2016-02-26 18:40:46"
1550 | },
1551 | {
1552 | "name": "sebastian/exporter",
1553 | "version": "1.2.1",
1554 | "source": {
1555 | "type": "git",
1556 | "url": "https://github.com/sebastianbergmann/exporter.git",
1557 | "reference": "7ae5513327cb536431847bcc0c10edba2701064e"
1558 | },
1559 | "dist": {
1560 | "type": "zip",
1561 | "url": "http://packagist.phpcomposer.com/files/sebastianbergmann/exporter/7ae5513327cb536431847bcc0c10edba2701064e.zip",
1562 | "reference": "7ae5513327cb536431847bcc0c10edba2701064e",
1563 | "shasum": ""
1564 | },
1565 | "require": {
1566 | "php": ">=5.3.3",
1567 | "sebastian/recursion-context": "~1.0"
1568 | },
1569 | "require-dev": {
1570 | "phpunit/phpunit": "~4.4"
1571 | },
1572 | "type": "library",
1573 | "extra": {
1574 | "branch-alias": {
1575 | "dev-master": "1.2.x-dev"
1576 | }
1577 | },
1578 | "autoload": {
1579 | "classmap": [
1580 | "src/"
1581 | ]
1582 | },
1583 | "notification-url": "https://packagist.org/downloads/",
1584 | "license": [
1585 | "BSD-3-Clause"
1586 | ],
1587 | "authors": [
1588 | {
1589 | "name": "Jeff Welch",
1590 | "email": "whatthejeff@gmail.com"
1591 | },
1592 | {
1593 | "name": "Volker Dusch",
1594 | "email": "github@wallbash.com"
1595 | },
1596 | {
1597 | "name": "Bernhard Schussek",
1598 | "email": "bschussek@2bepublished.at"
1599 | },
1600 | {
1601 | "name": "Sebastian Bergmann",
1602 | "email": "sebastian@phpunit.de"
1603 | },
1604 | {
1605 | "name": "Adam Harvey",
1606 | "email": "aharvey@php.net"
1607 | }
1608 | ],
1609 | "description": "Provides the functionality to export PHP variables for visualization",
1610 | "homepage": "http://www.github.com/sebastianbergmann/exporter",
1611 | "keywords": [
1612 | "export",
1613 | "exporter"
1614 | ],
1615 | "time": "2015-06-21 07:55:53"
1616 | },
1617 | {
1618 | "name": "sebastian/global-state",
1619 | "version": "1.1.1",
1620 | "source": {
1621 | "type": "git",
1622 | "url": "https://github.com/sebastianbergmann/global-state.git",
1623 | "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
1624 | },
1625 | "dist": {
1626 | "type": "zip",
1627 | "url": "http://packagist.phpcomposer.com/files/sebastianbergmann/global-state/bc37d50fea7d017d3d340f230811c9f1d7280af4.zip",
1628 | "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
1629 | "shasum": ""
1630 | },
1631 | "require": {
1632 | "php": ">=5.3.3"
1633 | },
1634 | "require-dev": {
1635 | "phpunit/phpunit": "~4.2"
1636 | },
1637 | "suggest": {
1638 | "ext-uopz": "*"
1639 | },
1640 | "type": "library",
1641 | "extra": {
1642 | "branch-alias": {
1643 | "dev-master": "1.0-dev"
1644 | }
1645 | },
1646 | "autoload": {
1647 | "classmap": [
1648 | "src/"
1649 | ]
1650 | },
1651 | "notification-url": "https://packagist.org/downloads/",
1652 | "license": [
1653 | "BSD-3-Clause"
1654 | ],
1655 | "authors": [
1656 | {
1657 | "name": "Sebastian Bergmann",
1658 | "email": "sebastian@phpunit.de"
1659 | }
1660 | ],
1661 | "description": "Snapshotting of global state",
1662 | "homepage": "http://www.github.com/sebastianbergmann/global-state",
1663 | "keywords": [
1664 | "global state"
1665 | ],
1666 | "time": "2015-10-12 03:26:01"
1667 | },
1668 | {
1669 | "name": "sebastian/recursion-context",
1670 | "version": "1.0.2",
1671 | "source": {
1672 | "type": "git",
1673 | "url": "https://github.com/sebastianbergmann/recursion-context.git",
1674 | "reference": "913401df809e99e4f47b27cdd781f4a258d58791"
1675 | },
1676 | "dist": {
1677 | "type": "zip",
1678 | "url": "http://packagist.phpcomposer.com/files/sebastianbergmann/recursion-context/913401df809e99e4f47b27cdd781f4a258d58791.zip",
1679 | "reference": "913401df809e99e4f47b27cdd781f4a258d58791",
1680 | "shasum": ""
1681 | },
1682 | "require": {
1683 | "php": ">=5.3.3"
1684 | },
1685 | "require-dev": {
1686 | "phpunit/phpunit": "~4.4"
1687 | },
1688 | "type": "library",
1689 | "extra": {
1690 | "branch-alias": {
1691 | "dev-master": "1.0.x-dev"
1692 | }
1693 | },
1694 | "autoload": {
1695 | "classmap": [
1696 | "src/"
1697 | ]
1698 | },
1699 | "notification-url": "https://packagist.org/downloads/",
1700 | "license": [
1701 | "BSD-3-Clause"
1702 | ],
1703 | "authors": [
1704 | {
1705 | "name": "Jeff Welch",
1706 | "email": "whatthejeff@gmail.com"
1707 | },
1708 | {
1709 | "name": "Sebastian Bergmann",
1710 | "email": "sebastian@phpunit.de"
1711 | },
1712 | {
1713 | "name": "Adam Harvey",
1714 | "email": "aharvey@php.net"
1715 | }
1716 | ],
1717 | "description": "Provides functionality to recursively process PHP variables",
1718 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
1719 | "time": "2015-11-11 19:50:13"
1720 | },
1721 | {
1722 | "name": "sebastian/version",
1723 | "version": "1.0.6",
1724 | "source": {
1725 | "type": "git",
1726 | "url": "https://github.com/sebastianbergmann/version.git",
1727 | "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
1728 | },
1729 | "dist": {
1730 | "type": "zip",
1731 | "url": "http://packagist.phpcomposer.com/files/sebastianbergmann/version/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6.zip",
1732 | "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
1733 | "shasum": ""
1734 | },
1735 | "type": "library",
1736 | "autoload": {
1737 | "classmap": [
1738 | "src/"
1739 | ]
1740 | },
1741 | "notification-url": "https://packagist.org/downloads/",
1742 | "license": [
1743 | "BSD-3-Clause"
1744 | ],
1745 | "authors": [
1746 | {
1747 | "name": "Sebastian Bergmann",
1748 | "email": "sebastian@phpunit.de",
1749 | "role": "lead"
1750 | }
1751 | ],
1752 | "description": "Library that helps with managing the version number of Git-hosted PHP projects",
1753 | "homepage": "https://github.com/sebastianbergmann/version",
1754 | "time": "2015-06-21 13:59:46"
1755 | },
1756 | {
1757 | "name": "swiftmailer/swiftmailer",
1758 | "version": "v5.4.1",
1759 | "source": {
1760 | "type": "git",
1761 | "url": "https://github.com/swiftmailer/swiftmailer.git",
1762 | "reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421"
1763 | },
1764 | "dist": {
1765 | "type": "zip",
1766 | "url": "http://packagist.phpcomposer.com/files/swiftmailer/swiftmailer/0697e6aa65c83edf97bb0f23d8763f94e3f11421.zip",
1767 | "reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421",
1768 | "shasum": ""
1769 | },
1770 | "require": {
1771 | "php": ">=5.3.3"
1772 | },
1773 | "require-dev": {
1774 | "mockery/mockery": "~0.9.1,<0.9.4"
1775 | },
1776 | "type": "library",
1777 | "extra": {
1778 | "branch-alias": {
1779 | "dev-master": "5.4-dev"
1780 | }
1781 | },
1782 | "autoload": {
1783 | "files": [
1784 | "lib/swift_required.php"
1785 | ]
1786 | },
1787 | "notification-url": "https://packagist.org/downloads/",
1788 | "license": [
1789 | "MIT"
1790 | ],
1791 | "authors": [
1792 | {
1793 | "name": "Chris Corbyn"
1794 | },
1795 | {
1796 | "name": "Fabien Potencier",
1797 | "email": "fabien@symfony.com"
1798 | }
1799 | ],
1800 | "description": "Swiftmailer, free feature-rich PHP mailer",
1801 | "homepage": "http://swiftmailer.org",
1802 | "keywords": [
1803 | "email",
1804 | "mail",
1805 | "mailer"
1806 | ],
1807 | "time": "2015-06-06 14:19:39"
1808 | },
1809 | {
1810 | "name": "symfony/yaml",
1811 | "version": "v3.0.3",
1812 | "source": {
1813 | "type": "git",
1814 | "url": "https://github.com/symfony/yaml.git",
1815 | "reference": "b5ba64cd67ecd6887f63868fa781ca094bd1377c"
1816 | },
1817 | "dist": {
1818 | "type": "zip",
1819 | "url": "https://packagist.phpcomposer.com/files/symfony/yaml/b5ba64cd67ecd6887f63868fa781ca094bd1377c.zip",
1820 | "reference": "b5ba64cd67ecd6887f63868fa781ca094bd1377c",
1821 | "shasum": ""
1822 | },
1823 | "require": {
1824 | "php": ">=5.5.9"
1825 | },
1826 | "type": "library",
1827 | "extra": {
1828 | "branch-alias": {
1829 | "dev-master": "3.0-dev"
1830 | }
1831 | },
1832 | "autoload": {
1833 | "psr-4": {
1834 | "Symfony\\Component\\Yaml\\": ""
1835 | },
1836 | "exclude-from-classmap": [
1837 | "/Tests/"
1838 | ]
1839 | },
1840 | "notification-url": "https://packagist.org/downloads/",
1841 | "license": [
1842 | "MIT"
1843 | ],
1844 | "authors": [
1845 | {
1846 | "name": "Fabien Potencier",
1847 | "email": "fabien@symfony.com"
1848 | },
1849 | {
1850 | "name": "Symfony Community",
1851 | "homepage": "https://symfony.com/contributors"
1852 | }
1853 | ],
1854 | "description": "Symfony Yaml Component",
1855 | "homepage": "https://symfony.com",
1856 | "time": "2016-02-23 15:16:06"
1857 | }
1858 | ],
1859 | "aliases": [],
1860 | "minimum-stability": "stable",
1861 | "stability-flags": [],
1862 | "prefer-stable": false,
1863 | "prefer-lowest": false,
1864 | "platform": [],
1865 | "platform-dev": []
1866 | }
1867 |
--------------------------------------------------------------------------------