├── 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 | --------------------------------------------------------------------------------