├── .babelrc ├── .editorconfig ├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── composer.json ├── composer.lock ├── config ├── dev.php └── prod.php ├── database ├── migrations │ └── 20170514200429_user_table_migration.php └── seeds │ └── UserSeeder.php ├── package.json ├── phinx.yml ├── phpunit.xml ├── resources ├── assets │ ├── js │ │ ├── app.js │ │ └── components │ │ │ ├── CreateItemForm.vue │ │ │ ├── EditableTableGrid.vue │ │ │ ├── Example.vue │ │ │ └── Row.vue │ └── sass │ │ └── app.scss └── views │ └── index.twig ├── src ├── App │ ├── Controllers │ │ └── UserController.php │ ├── RoutesLoader.php │ ├── Services │ │ ├── BaseService.php │ │ └── UserService.php │ └── ServicesLoader.php └── app.php ├── storage ├── cache │ └── .gitignore └── logs │ └── .gitignore ├── tests └── Services │ └── UserServiceTest.php ├── web ├── .htaccess ├── index.php └── js │ └── app.js └── webpack.config.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["latest", { 4 | "es2015": { "modules": false } 5 | }] 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = tab 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | vendor 2 | node_modules 3 | .DS_Store 4 | app/logs/*.log 5 | *~ 6 | .idea 7 | app.db -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 Alex Mokrenko 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Silex Simple REST and vue data table components 2 | 3 | Just build a data table with rest api support. 4 | 5 | ![Data table image](https://preview.ibb.co/gXkDbQ/Screenshot_3.png) 6 | #### How do I run it? 7 | After download from the root folder of the project, run the following commands to install the php dependencies, import some data, and run a local php server. 8 | 9 | You need at least php **7.0*** with **mysql extension** enabled and **Composer** 10 | 11 | composer install 12 | npm install 13 | php -S 0:9001 -t web/ 14 | 15 | 16 | Your api is now available at http://localhost:9001. 17 | 18 | For building js resources, use webpack 19 | 20 | To config database, go to config/prod.php 21 | 22 | ```php 23 | $app['db.options'] = array( 24 | 'driver' => 'pdo_mysql', 25 | 'user' => 'user', 26 | 'password' => 'password', 27 | 'dbname' => 'mydb', 28 | 'host' => 'localhost', 29 | ); 30 | ``` 31 | 32 | #### Run tests 33 | 34 | `vendor/bin/phpunit` 35 | 36 | ### 37 | 38 | If you want to create a basic db structure and seeds you can use phinx, but before you must add your db credentials in phinx.yml 39 | 40 | `php vendor/bin/phinx migrate` 41 | 42 | `php vendor/bin/phinx seed:run` 43 | 44 | 45 | #### Api routes 46 | 47 | GET -> http://localhost:9001/api/users 48 | GET -> http://localhost:9001/api/users/{id} 49 | POST -> http://localhost:9001/api/users 50 | PATCH -> http://localhost:9001/api/users/{id} 51 | DELETE -> http://localhost:9001/api/users/{id} 52 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "al0mie/silex-vue2-grid-table", 3 | "type": "project", 4 | "description": "A simple silex skeleton", 5 | "keywords": [ 6 | "framework", "silex", "rest", "api" 7 | ], 8 | "homepage": "http://github.com/al0mie/silex-vue-grid-table", 9 | "license": "MIT", 10 | "require": { 11 | "silex/silex": "~2.0", 12 | "monolog/monolog": "~1.11", 13 | "doctrine/dbal": "~2.5", 14 | "nesbot/Carbon": "~1.21", 15 | "twig/twig": "^2.3" 16 | }, 17 | "require-dev": { 18 | "phpunit/phpunit": "~4.1.4", 19 | "mockery/mockery": "~0.9.1", 20 | "robmorgan/phinx": "^0.8.0", 21 | "fzaninotto/faker": "^1.6" 22 | }, 23 | "autoload": { 24 | "psr-0": { 25 | "App": "src/" 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /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": "865606e8c8a6dd18262bf26aa5d34e1e", 8 | "content-hash": "4ffdf62a7200dc2d1a90cd3ad182e935", 9 | "packages": [ 10 | { 11 | "name": "doctrine/annotations", 12 | "version": "v1.2.7", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/doctrine/annotations.git", 16 | "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/doctrine/annotations/zipball/f25c8aab83e0c3e976fd7d19875f198ccf2f7535", 21 | "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "doctrine/lexer": "1.*", 26 | "php": ">=5.3.2" 27 | }, 28 | "require-dev": { 29 | "doctrine/cache": "1.*", 30 | "phpunit/phpunit": "4.*" 31 | }, 32 | "type": "library", 33 | "extra": { 34 | "branch-alias": { 35 | "dev-master": "1.3.x-dev" 36 | } 37 | }, 38 | "autoload": { 39 | "psr-0": { 40 | "Doctrine\\Common\\Annotations\\": "lib/" 41 | } 42 | }, 43 | "notification-url": "https://packagist.org/downloads/", 44 | "license": [ 45 | "MIT" 46 | ], 47 | "authors": [ 48 | { 49 | "name": "Roman Borschel", 50 | "email": "roman@code-factory.org" 51 | }, 52 | { 53 | "name": "Benjamin Eberlei", 54 | "email": "kontakt@beberlei.de" 55 | }, 56 | { 57 | "name": "Guilherme Blanco", 58 | "email": "guilhermeblanco@gmail.com" 59 | }, 60 | { 61 | "name": "Jonathan Wage", 62 | "email": "jonwage@gmail.com" 63 | }, 64 | { 65 | "name": "Johannes Schmitt", 66 | "email": "schmittjoh@gmail.com" 67 | } 68 | ], 69 | "description": "Docblock Annotations Parser", 70 | "homepage": "http://www.doctrine-project.org", 71 | "keywords": [ 72 | "annotations", 73 | "docblock", 74 | "parser" 75 | ], 76 | "time": "2015-08-31 12:32:49" 77 | }, 78 | { 79 | "name": "doctrine/cache", 80 | "version": "v1.6.0", 81 | "source": { 82 | "type": "git", 83 | "url": "https://github.com/doctrine/cache.git", 84 | "reference": "f8af318d14bdb0eff0336795b428b547bd39ccb6" 85 | }, 86 | "dist": { 87 | "type": "zip", 88 | "url": "https://api.github.com/repos/doctrine/cache/zipball/f8af318d14bdb0eff0336795b428b547bd39ccb6", 89 | "reference": "f8af318d14bdb0eff0336795b428b547bd39ccb6", 90 | "shasum": "" 91 | }, 92 | "require": { 93 | "php": "~5.5|~7.0" 94 | }, 95 | "conflict": { 96 | "doctrine/common": ">2.2,<2.4" 97 | }, 98 | "require-dev": { 99 | "phpunit/phpunit": "~4.8|~5.0", 100 | "predis/predis": "~1.0", 101 | "satooshi/php-coveralls": "~0.6" 102 | }, 103 | "type": "library", 104 | "extra": { 105 | "branch-alias": { 106 | "dev-master": "1.6.x-dev" 107 | } 108 | }, 109 | "autoload": { 110 | "psr-4": { 111 | "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" 112 | } 113 | }, 114 | "notification-url": "https://packagist.org/downloads/", 115 | "license": [ 116 | "MIT" 117 | ], 118 | "authors": [ 119 | { 120 | "name": "Roman Borschel", 121 | "email": "roman@code-factory.org" 122 | }, 123 | { 124 | "name": "Benjamin Eberlei", 125 | "email": "kontakt@beberlei.de" 126 | }, 127 | { 128 | "name": "Guilherme Blanco", 129 | "email": "guilhermeblanco@gmail.com" 130 | }, 131 | { 132 | "name": "Jonathan Wage", 133 | "email": "jonwage@gmail.com" 134 | }, 135 | { 136 | "name": "Johannes Schmitt", 137 | "email": "schmittjoh@gmail.com" 138 | } 139 | ], 140 | "description": "Caching library offering an object-oriented API for many cache backends", 141 | "homepage": "http://www.doctrine-project.org", 142 | "keywords": [ 143 | "cache", 144 | "caching" 145 | ], 146 | "time": "2015-12-31 16:37:02" 147 | }, 148 | { 149 | "name": "doctrine/collections", 150 | "version": "v1.3.0", 151 | "source": { 152 | "type": "git", 153 | "url": "https://github.com/doctrine/collections.git", 154 | "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a" 155 | }, 156 | "dist": { 157 | "type": "zip", 158 | "url": "https://api.github.com/repos/doctrine/collections/zipball/6c1e4eef75f310ea1b3e30945e9f06e652128b8a", 159 | "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a", 160 | "shasum": "" 161 | }, 162 | "require": { 163 | "php": ">=5.3.2" 164 | }, 165 | "require-dev": { 166 | "phpunit/phpunit": "~4.0" 167 | }, 168 | "type": "library", 169 | "extra": { 170 | "branch-alias": { 171 | "dev-master": "1.2.x-dev" 172 | } 173 | }, 174 | "autoload": { 175 | "psr-0": { 176 | "Doctrine\\Common\\Collections\\": "lib/" 177 | } 178 | }, 179 | "notification-url": "https://packagist.org/downloads/", 180 | "license": [ 181 | "MIT" 182 | ], 183 | "authors": [ 184 | { 185 | "name": "Roman Borschel", 186 | "email": "roman@code-factory.org" 187 | }, 188 | { 189 | "name": "Benjamin Eberlei", 190 | "email": "kontakt@beberlei.de" 191 | }, 192 | { 193 | "name": "Guilherme Blanco", 194 | "email": "guilhermeblanco@gmail.com" 195 | }, 196 | { 197 | "name": "Jonathan Wage", 198 | "email": "jonwage@gmail.com" 199 | }, 200 | { 201 | "name": "Johannes Schmitt", 202 | "email": "schmittjoh@gmail.com" 203 | } 204 | ], 205 | "description": "Collections Abstraction library", 206 | "homepage": "http://www.doctrine-project.org", 207 | "keywords": [ 208 | "array", 209 | "collections", 210 | "iterator" 211 | ], 212 | "time": "2015-04-14 22:21:58" 213 | }, 214 | { 215 | "name": "doctrine/common", 216 | "version": "v2.6.1", 217 | "source": { 218 | "type": "git", 219 | "url": "https://github.com/doctrine/common.git", 220 | "reference": "a579557bc689580c19fee4e27487a67fe60defc0" 221 | }, 222 | "dist": { 223 | "type": "zip", 224 | "url": "https://api.github.com/repos/doctrine/common/zipball/a579557bc689580c19fee4e27487a67fe60defc0", 225 | "reference": "a579557bc689580c19fee4e27487a67fe60defc0", 226 | "shasum": "" 227 | }, 228 | "require": { 229 | "doctrine/annotations": "1.*", 230 | "doctrine/cache": "1.*", 231 | "doctrine/collections": "1.*", 232 | "doctrine/inflector": "1.*", 233 | "doctrine/lexer": "1.*", 234 | "php": "~5.5|~7.0" 235 | }, 236 | "require-dev": { 237 | "phpunit/phpunit": "~4.8|~5.0" 238 | }, 239 | "type": "library", 240 | "extra": { 241 | "branch-alias": { 242 | "dev-master": "2.7.x-dev" 243 | } 244 | }, 245 | "autoload": { 246 | "psr-4": { 247 | "Doctrine\\Common\\": "lib/Doctrine/Common" 248 | } 249 | }, 250 | "notification-url": "https://packagist.org/downloads/", 251 | "license": [ 252 | "MIT" 253 | ], 254 | "authors": [ 255 | { 256 | "name": "Roman Borschel", 257 | "email": "roman@code-factory.org" 258 | }, 259 | { 260 | "name": "Benjamin Eberlei", 261 | "email": "kontakt@beberlei.de" 262 | }, 263 | { 264 | "name": "Guilherme Blanco", 265 | "email": "guilhermeblanco@gmail.com" 266 | }, 267 | { 268 | "name": "Jonathan Wage", 269 | "email": "jonwage@gmail.com" 270 | }, 271 | { 272 | "name": "Johannes Schmitt", 273 | "email": "schmittjoh@gmail.com" 274 | } 275 | ], 276 | "description": "Common Library for Doctrine projects", 277 | "homepage": "http://www.doctrine-project.org", 278 | "keywords": [ 279 | "annotations", 280 | "collections", 281 | "eventmanager", 282 | "persistence", 283 | "spl" 284 | ], 285 | "time": "2015-12-25 13:18:31" 286 | }, 287 | { 288 | "name": "doctrine/dbal", 289 | "version": "v2.5.5", 290 | "source": { 291 | "type": "git", 292 | "url": "https://github.com/doctrine/dbal.git", 293 | "reference": "9f8c05cd5225a320d56d4bfdb4772f10d045a0c9" 294 | }, 295 | "dist": { 296 | "type": "zip", 297 | "url": "https://api.github.com/repos/doctrine/dbal/zipball/9f8c05cd5225a320d56d4bfdb4772f10d045a0c9", 298 | "reference": "9f8c05cd5225a320d56d4bfdb4772f10d045a0c9", 299 | "shasum": "" 300 | }, 301 | "require": { 302 | "doctrine/common": ">=2.4,<2.7-dev", 303 | "php": ">=5.3.2" 304 | }, 305 | "require-dev": { 306 | "phpunit/phpunit": "4.*", 307 | "symfony/console": "2.*||^3.0" 308 | }, 309 | "suggest": { 310 | "symfony/console": "For helpful console commands such as SQL execution and import of files." 311 | }, 312 | "bin": [ 313 | "bin/doctrine-dbal" 314 | ], 315 | "type": "library", 316 | "extra": { 317 | "branch-alias": { 318 | "dev-master": "2.5.x-dev" 319 | } 320 | }, 321 | "autoload": { 322 | "psr-0": { 323 | "Doctrine\\DBAL\\": "lib/" 324 | } 325 | }, 326 | "notification-url": "https://packagist.org/downloads/", 327 | "license": [ 328 | "MIT" 329 | ], 330 | "authors": [ 331 | { 332 | "name": "Roman Borschel", 333 | "email": "roman@code-factory.org" 334 | }, 335 | { 336 | "name": "Benjamin Eberlei", 337 | "email": "kontakt@beberlei.de" 338 | }, 339 | { 340 | "name": "Guilherme Blanco", 341 | "email": "guilhermeblanco@gmail.com" 342 | }, 343 | { 344 | "name": "Jonathan Wage", 345 | "email": "jonwage@gmail.com" 346 | } 347 | ], 348 | "description": "Database Abstraction Layer", 349 | "homepage": "http://www.doctrine-project.org", 350 | "keywords": [ 351 | "database", 352 | "dbal", 353 | "persistence", 354 | "queryobject" 355 | ], 356 | "time": "2016-09-09 19:13:33" 357 | }, 358 | { 359 | "name": "doctrine/inflector", 360 | "version": "v1.1.0", 361 | "source": { 362 | "type": "git", 363 | "url": "https://github.com/doctrine/inflector.git", 364 | "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" 365 | }, 366 | "dist": { 367 | "type": "zip", 368 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", 369 | "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", 370 | "shasum": "" 371 | }, 372 | "require": { 373 | "php": ">=5.3.2" 374 | }, 375 | "require-dev": { 376 | "phpunit/phpunit": "4.*" 377 | }, 378 | "type": "library", 379 | "extra": { 380 | "branch-alias": { 381 | "dev-master": "1.1.x-dev" 382 | } 383 | }, 384 | "autoload": { 385 | "psr-0": { 386 | "Doctrine\\Common\\Inflector\\": "lib/" 387 | } 388 | }, 389 | "notification-url": "https://packagist.org/downloads/", 390 | "license": [ 391 | "MIT" 392 | ], 393 | "authors": [ 394 | { 395 | "name": "Roman Borschel", 396 | "email": "roman@code-factory.org" 397 | }, 398 | { 399 | "name": "Benjamin Eberlei", 400 | "email": "kontakt@beberlei.de" 401 | }, 402 | { 403 | "name": "Guilherme Blanco", 404 | "email": "guilhermeblanco@gmail.com" 405 | }, 406 | { 407 | "name": "Jonathan Wage", 408 | "email": "jonwage@gmail.com" 409 | }, 410 | { 411 | "name": "Johannes Schmitt", 412 | "email": "schmittjoh@gmail.com" 413 | } 414 | ], 415 | "description": "Common String Manipulations with regard to casing and singular/plural rules.", 416 | "homepage": "http://www.doctrine-project.org", 417 | "keywords": [ 418 | "inflection", 419 | "pluralize", 420 | "singularize", 421 | "string" 422 | ], 423 | "time": "2015-11-06 14:35:42" 424 | }, 425 | { 426 | "name": "doctrine/lexer", 427 | "version": "v1.0.1", 428 | "source": { 429 | "type": "git", 430 | "url": "https://github.com/doctrine/lexer.git", 431 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" 432 | }, 433 | "dist": { 434 | "type": "zip", 435 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", 436 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", 437 | "shasum": "" 438 | }, 439 | "require": { 440 | "php": ">=5.3.2" 441 | }, 442 | "type": "library", 443 | "extra": { 444 | "branch-alias": { 445 | "dev-master": "1.0.x-dev" 446 | } 447 | }, 448 | "autoload": { 449 | "psr-0": { 450 | "Doctrine\\Common\\Lexer\\": "lib/" 451 | } 452 | }, 453 | "notification-url": "https://packagist.org/downloads/", 454 | "license": [ 455 | "MIT" 456 | ], 457 | "authors": [ 458 | { 459 | "name": "Roman Borschel", 460 | "email": "roman@code-factory.org" 461 | }, 462 | { 463 | "name": "Guilherme Blanco", 464 | "email": "guilhermeblanco@gmail.com" 465 | }, 466 | { 467 | "name": "Johannes Schmitt", 468 | "email": "schmittjoh@gmail.com" 469 | } 470 | ], 471 | "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", 472 | "homepage": "http://www.doctrine-project.org", 473 | "keywords": [ 474 | "lexer", 475 | "parser" 476 | ], 477 | "time": "2014-09-09 13:34:57" 478 | }, 479 | { 480 | "name": "euskadi31/cors-service-provider", 481 | "version": "v1.0.2", 482 | "source": { 483 | "type": "git", 484 | "url": "https://github.com/euskadi31/CorsServiceProvider.git", 485 | "reference": "6169e66bec79cbd80c918b6e65c8af91997f7683" 486 | }, 487 | "dist": { 488 | "type": "zip", 489 | "url": "https://api.github.com/repos/euskadi31/CorsServiceProvider/zipball/6169e66bec79cbd80c918b6e65c8af91997f7683", 490 | "reference": "6169e66bec79cbd80c918b6e65c8af91997f7683", 491 | "shasum": "" 492 | }, 493 | "require": { 494 | "silex/silex": "~2.0@dev" 495 | }, 496 | "require-dev": { 497 | "leaphub/phpcs-symfony2-standard": "~2.0.1", 498 | "phpunit/phpunit": "^4.7" 499 | }, 500 | "type": "library", 501 | "autoload": { 502 | "psr-4": { 503 | "Euskadi31\\Silex\\": "src/" 504 | } 505 | }, 506 | "notification-url": "https://packagist.org/downloads/", 507 | "license": [ 508 | "MIT" 509 | ], 510 | "authors": [ 511 | { 512 | "name": "Axel Etcheverry", 513 | "email": "axel@etcheverry.biz" 514 | } 515 | ], 516 | "description": "A CORS Service Provider for Silex 2.0", 517 | "time": "2016-06-15 09:40:15" 518 | }, 519 | { 520 | "name": "monolog/monolog", 521 | "version": "1.21.0", 522 | "source": { 523 | "type": "git", 524 | "url": "https://github.com/Seldaek/monolog.git", 525 | "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952" 526 | }, 527 | "dist": { 528 | "type": "zip", 529 | "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f42fbdfd53e306bda545845e4dbfd3e72edb4952", 530 | "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952", 531 | "shasum": "" 532 | }, 533 | "require": { 534 | "php": ">=5.3.0", 535 | "psr/log": "~1.0" 536 | }, 537 | "provide": { 538 | "psr/log-implementation": "1.0.0" 539 | }, 540 | "require-dev": { 541 | "aws/aws-sdk-php": "^2.4.9", 542 | "doctrine/couchdb": "~1.0@dev", 543 | "graylog2/gelf-php": "~1.0", 544 | "jakub-onderka/php-parallel-lint": "0.9", 545 | "php-amqplib/php-amqplib": "~2.4", 546 | "php-console/php-console": "^3.1.3", 547 | "phpunit/phpunit": "~4.5", 548 | "phpunit/phpunit-mock-objects": "2.3.0", 549 | "ruflin/elastica": ">=0.90 <3.0", 550 | "sentry/sentry": "^0.13", 551 | "swiftmailer/swiftmailer": "~5.3" 552 | }, 553 | "suggest": { 554 | "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", 555 | "doctrine/couchdb": "Allow sending log messages to a CouchDB server", 556 | "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", 557 | "ext-mongo": "Allow sending log messages to a MongoDB server", 558 | "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", 559 | "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", 560 | "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", 561 | "php-console/php-console": "Allow sending log messages to Google Chrome", 562 | "rollbar/rollbar": "Allow sending log messages to Rollbar", 563 | "ruflin/elastica": "Allow sending log messages to an Elastic Search server", 564 | "sentry/sentry": "Allow sending log messages to a Sentry server" 565 | }, 566 | "type": "library", 567 | "extra": { 568 | "branch-alias": { 569 | "dev-master": "2.0.x-dev" 570 | } 571 | }, 572 | "autoload": { 573 | "psr-4": { 574 | "Monolog\\": "src/Monolog" 575 | } 576 | }, 577 | "notification-url": "https://packagist.org/downloads/", 578 | "license": [ 579 | "MIT" 580 | ], 581 | "authors": [ 582 | { 583 | "name": "Jordi Boggiano", 584 | "email": "j.boggiano@seld.be", 585 | "homepage": "http://seld.be" 586 | } 587 | ], 588 | "description": "Sends your logs to files, sockets, inboxes, databases and various web services", 589 | "homepage": "http://github.com/Seldaek/monolog", 590 | "keywords": [ 591 | "log", 592 | "logging", 593 | "psr-3" 594 | ], 595 | "time": "2016-07-29 03:23:52" 596 | }, 597 | { 598 | "name": "nesbot/carbon", 599 | "version": "1.21.0", 600 | "source": { 601 | "type": "git", 602 | "url": "https://github.com/briannesbitt/Carbon.git", 603 | "reference": "7b08ec6f75791e130012f206e3f7b0e76e18e3d7" 604 | }, 605 | "dist": { 606 | "type": "zip", 607 | "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7b08ec6f75791e130012f206e3f7b0e76e18e3d7", 608 | "reference": "7b08ec6f75791e130012f206e3f7b0e76e18e3d7", 609 | "shasum": "" 610 | }, 611 | "require": { 612 | "php": ">=5.3.0", 613 | "symfony/translation": "~2.6|~3.0" 614 | }, 615 | "require-dev": { 616 | "phpunit/phpunit": "~4.0|~5.0" 617 | }, 618 | "type": "library", 619 | "autoload": { 620 | "psr-4": { 621 | "Carbon\\": "src/Carbon/" 622 | } 623 | }, 624 | "notification-url": "https://packagist.org/downloads/", 625 | "license": [ 626 | "MIT" 627 | ], 628 | "authors": [ 629 | { 630 | "name": "Brian Nesbitt", 631 | "email": "brian@nesbot.com", 632 | "homepage": "http://nesbot.com" 633 | } 634 | ], 635 | "description": "A simple API extension for DateTime.", 636 | "homepage": "http://carbon.nesbot.com", 637 | "keywords": [ 638 | "date", 639 | "datetime", 640 | "time" 641 | ], 642 | "time": "2015-11-04 20:07:17" 643 | }, 644 | { 645 | "name": "pimple/pimple", 646 | "version": "v3.0.2", 647 | "source": { 648 | "type": "git", 649 | "url": "https://github.com/silexphp/Pimple.git", 650 | "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a" 651 | }, 652 | "dist": { 653 | "type": "zip", 654 | "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a30f7d6e57565a2e1a316e1baf2a483f788b258a", 655 | "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a", 656 | "shasum": "" 657 | }, 658 | "require": { 659 | "php": ">=5.3.0" 660 | }, 661 | "type": "library", 662 | "extra": { 663 | "branch-alias": { 664 | "dev-master": "3.0.x-dev" 665 | } 666 | }, 667 | "autoload": { 668 | "psr-0": { 669 | "Pimple": "src/" 670 | } 671 | }, 672 | "notification-url": "https://packagist.org/downloads/", 673 | "license": [ 674 | "MIT" 675 | ], 676 | "authors": [ 677 | { 678 | "name": "Fabien Potencier", 679 | "email": "fabien@symfony.com" 680 | } 681 | ], 682 | "description": "Pimple, a simple Dependency Injection Container", 683 | "homepage": "http://pimple.sensiolabs.org", 684 | "keywords": [ 685 | "container", 686 | "dependency injection" 687 | ], 688 | "time": "2015-09-11 15:10:35" 689 | }, 690 | { 691 | "name": "psr/log", 692 | "version": "1.0.2", 693 | "source": { 694 | "type": "git", 695 | "url": "https://github.com/php-fig/log.git", 696 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" 697 | }, 698 | "dist": { 699 | "type": "zip", 700 | "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 701 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 702 | "shasum": "" 703 | }, 704 | "require": { 705 | "php": ">=5.3.0" 706 | }, 707 | "type": "library", 708 | "extra": { 709 | "branch-alias": { 710 | "dev-master": "1.0.x-dev" 711 | } 712 | }, 713 | "autoload": { 714 | "psr-4": { 715 | "Psr\\Log\\": "Psr/Log/" 716 | } 717 | }, 718 | "notification-url": "https://packagist.org/downloads/", 719 | "license": [ 720 | "MIT" 721 | ], 722 | "authors": [ 723 | { 724 | "name": "PHP-FIG", 725 | "homepage": "http://www.php-fig.org/" 726 | } 727 | ], 728 | "description": "Common interface for logging libraries", 729 | "homepage": "https://github.com/php-fig/log", 730 | "keywords": [ 731 | "log", 732 | "psr", 733 | "psr-3" 734 | ], 735 | "time": "2016-10-10 12:19:37" 736 | }, 737 | { 738 | "name": "silex/silex", 739 | "version": "v2.0.3", 740 | "source": { 741 | "type": "git", 742 | "url": "https://github.com/silexphp/Silex.git", 743 | "reference": "fd0852ebfa0a4cf1e17d746bb81962ec69bbb6d1" 744 | }, 745 | "dist": { 746 | "type": "zip", 747 | "url": "https://api.github.com/repos/silexphp/Silex/zipball/fd0852ebfa0a4cf1e17d746bb81962ec69bbb6d1", 748 | "reference": "fd0852ebfa0a4cf1e17d746bb81962ec69bbb6d1", 749 | "shasum": "" 750 | }, 751 | "require": { 752 | "php": ">=5.5.9", 753 | "pimple/pimple": "~3.0", 754 | "symfony/event-dispatcher": "~2.8|^3.0", 755 | "symfony/http-foundation": "~2.8|^3.0", 756 | "symfony/http-kernel": "~2.8|^3.0", 757 | "symfony/routing": "~2.8|^3.0" 758 | }, 759 | "replace": { 760 | "silex/api": "self.version", 761 | "silex/providers": "self.version" 762 | }, 763 | "require-dev": { 764 | "doctrine/dbal": "~2.2", 765 | "monolog/monolog": "^1.4.1", 766 | "swiftmailer/swiftmailer": "~5", 767 | "symfony/asset": "~2.8|^3.0", 768 | "symfony/browser-kit": "~2.8|^3.0", 769 | "symfony/config": "~2.8|^3.0", 770 | "symfony/css-selector": "~2.8|^3.0", 771 | "symfony/debug": "~2.8|^3.0", 772 | "symfony/doctrine-bridge": "~2.8|^3.0", 773 | "symfony/dom-crawler": "~2.8|^3.0", 774 | "symfony/expression-language": "~2.8|^3.0", 775 | "symfony/finder": "~2.8|^3.0", 776 | "symfony/form": "~2.8|^3.0", 777 | "symfony/intl": "~2.8|^3.0", 778 | "symfony/monolog-bridge": "~2.8|^3.0", 779 | "symfony/options-resolver": "~2.8|^3.0", 780 | "symfony/phpunit-bridge": "~2.8|^3.0", 781 | "symfony/process": "~2.8|^3.0", 782 | "symfony/security": "~2.8|^3.0", 783 | "symfony/serializer": "~2.8|^3.0", 784 | "symfony/translation": "~2.8|^3.0", 785 | "symfony/twig-bridge": "~2.8|^3.0", 786 | "symfony/validator": "~2.8|^3.0", 787 | "symfony/var-dumper": "~2.8|^3.0", 788 | "twig/twig": "~1.8|~2.0" 789 | }, 790 | "type": "library", 791 | "extra": { 792 | "branch-alias": { 793 | "dev-master": "2.0.x-dev" 794 | } 795 | }, 796 | "autoload": { 797 | "psr-4": { 798 | "Silex\\": "src/Silex" 799 | } 800 | }, 801 | "notification-url": "https://packagist.org/downloads/", 802 | "license": [ 803 | "MIT" 804 | ], 805 | "authors": [ 806 | { 807 | "name": "Fabien Potencier", 808 | "email": "fabien@symfony.com" 809 | }, 810 | { 811 | "name": "Igor Wiedler", 812 | "email": "igor@wiedler.ch" 813 | } 814 | ], 815 | "description": "The PHP micro-framework based on the Symfony Components", 816 | "homepage": "http://silex.sensiolabs.org", 817 | "keywords": [ 818 | "microframework" 819 | ], 820 | "time": "2016-08-22 17:50:21" 821 | }, 822 | { 823 | "name": "symfony/debug", 824 | "version": "v3.1.5", 825 | "source": { 826 | "type": "git", 827 | "url": "https://github.com/symfony/debug.git", 828 | "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8" 829 | }, 830 | "dist": { 831 | "type": "zip", 832 | "url": "https://api.github.com/repos/symfony/debug/zipball/e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", 833 | "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", 834 | "shasum": "" 835 | }, 836 | "require": { 837 | "php": ">=5.5.9", 838 | "psr/log": "~1.0" 839 | }, 840 | "conflict": { 841 | "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" 842 | }, 843 | "require-dev": { 844 | "symfony/class-loader": "~2.8|~3.0", 845 | "symfony/http-kernel": "~2.8|~3.0" 846 | }, 847 | "type": "library", 848 | "extra": { 849 | "branch-alias": { 850 | "dev-master": "3.1-dev" 851 | } 852 | }, 853 | "autoload": { 854 | "psr-4": { 855 | "Symfony\\Component\\Debug\\": "" 856 | }, 857 | "exclude-from-classmap": [ 858 | "/Tests/" 859 | ] 860 | }, 861 | "notification-url": "https://packagist.org/downloads/", 862 | "license": [ 863 | "MIT" 864 | ], 865 | "authors": [ 866 | { 867 | "name": "Fabien Potencier", 868 | "email": "fabien@symfony.com" 869 | }, 870 | { 871 | "name": "Symfony Community", 872 | "homepage": "https://symfony.com/contributors" 873 | } 874 | ], 875 | "description": "Symfony Debug Component", 876 | "homepage": "https://symfony.com", 877 | "time": "2016-09-06 11:02:40" 878 | }, 879 | { 880 | "name": "symfony/event-dispatcher", 881 | "version": "v3.1.5", 882 | "source": { 883 | "type": "git", 884 | "url": "https://github.com/symfony/event-dispatcher.git", 885 | "reference": "c0c00c80b3a69132c4e55c3e7db32b4a387615e5" 886 | }, 887 | "dist": { 888 | "type": "zip", 889 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c0c00c80b3a69132c4e55c3e7db32b4a387615e5", 890 | "reference": "c0c00c80b3a69132c4e55c3e7db32b4a387615e5", 891 | "shasum": "" 892 | }, 893 | "require": { 894 | "php": ">=5.5.9" 895 | }, 896 | "require-dev": { 897 | "psr/log": "~1.0", 898 | "symfony/config": "~2.8|~3.0", 899 | "symfony/dependency-injection": "~2.8|~3.0", 900 | "symfony/expression-language": "~2.8|~3.0", 901 | "symfony/stopwatch": "~2.8|~3.0" 902 | }, 903 | "suggest": { 904 | "symfony/dependency-injection": "", 905 | "symfony/http-kernel": "" 906 | }, 907 | "type": "library", 908 | "extra": { 909 | "branch-alias": { 910 | "dev-master": "3.1-dev" 911 | } 912 | }, 913 | "autoload": { 914 | "psr-4": { 915 | "Symfony\\Component\\EventDispatcher\\": "" 916 | }, 917 | "exclude-from-classmap": [ 918 | "/Tests/" 919 | ] 920 | }, 921 | "notification-url": "https://packagist.org/downloads/", 922 | "license": [ 923 | "MIT" 924 | ], 925 | "authors": [ 926 | { 927 | "name": "Fabien Potencier", 928 | "email": "fabien@symfony.com" 929 | }, 930 | { 931 | "name": "Symfony Community", 932 | "homepage": "https://symfony.com/contributors" 933 | } 934 | ], 935 | "description": "Symfony EventDispatcher Component", 936 | "homepage": "https://symfony.com", 937 | "time": "2016-07-19 10:45:57" 938 | }, 939 | { 940 | "name": "symfony/http-foundation", 941 | "version": "v3.1.5", 942 | "source": { 943 | "type": "git", 944 | "url": "https://github.com/symfony/http-foundation.git", 945 | "reference": "5114f1becca9f29e3af94374f1689c83c1aa3d97" 946 | }, 947 | "dist": { 948 | "type": "zip", 949 | "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5114f1becca9f29e3af94374f1689c83c1aa3d97", 950 | "reference": "5114f1becca9f29e3af94374f1689c83c1aa3d97", 951 | "shasum": "" 952 | }, 953 | "require": { 954 | "php": ">=5.5.9", 955 | "symfony/polyfill-mbstring": "~1.1" 956 | }, 957 | "require-dev": { 958 | "symfony/expression-language": "~2.8|~3.0" 959 | }, 960 | "type": "library", 961 | "extra": { 962 | "branch-alias": { 963 | "dev-master": "3.1-dev" 964 | } 965 | }, 966 | "autoload": { 967 | "psr-4": { 968 | "Symfony\\Component\\HttpFoundation\\": "" 969 | }, 970 | "exclude-from-classmap": [ 971 | "/Tests/" 972 | ] 973 | }, 974 | "notification-url": "https://packagist.org/downloads/", 975 | "license": [ 976 | "MIT" 977 | ], 978 | "authors": [ 979 | { 980 | "name": "Fabien Potencier", 981 | "email": "fabien@symfony.com" 982 | }, 983 | { 984 | "name": "Symfony Community", 985 | "homepage": "https://symfony.com/contributors" 986 | } 987 | ], 988 | "description": "Symfony HttpFoundation Component", 989 | "homepage": "https://symfony.com", 990 | "time": "2016-09-21 20:55:10" 991 | }, 992 | { 993 | "name": "symfony/http-kernel", 994 | "version": "v3.1.5", 995 | "source": { 996 | "type": "git", 997 | "url": "https://github.com/symfony/http-kernel.git", 998 | "reference": "dc339d6eebadfa6e39c52868b4d4a715eff13c69" 999 | }, 1000 | "dist": { 1001 | "type": "zip", 1002 | "url": "https://api.github.com/repos/symfony/http-kernel/zipball/dc339d6eebadfa6e39c52868b4d4a715eff13c69", 1003 | "reference": "dc339d6eebadfa6e39c52868b4d4a715eff13c69", 1004 | "shasum": "" 1005 | }, 1006 | "require": { 1007 | "php": ">=5.5.9", 1008 | "psr/log": "~1.0", 1009 | "symfony/debug": "~2.8|~3.0", 1010 | "symfony/event-dispatcher": "~2.8|~3.0", 1011 | "symfony/http-foundation": "~2.8.8|~3.0.8|~3.1.2|~3.2" 1012 | }, 1013 | "conflict": { 1014 | "symfony/config": "<2.8" 1015 | }, 1016 | "require-dev": { 1017 | "symfony/browser-kit": "~2.8|~3.0", 1018 | "symfony/class-loader": "~2.8|~3.0", 1019 | "symfony/config": "~2.8|~3.0", 1020 | "symfony/console": "~2.8|~3.0", 1021 | "symfony/css-selector": "~2.8|~3.0", 1022 | "symfony/dependency-injection": "~2.8|~3.0", 1023 | "symfony/dom-crawler": "~2.8|~3.0", 1024 | "symfony/expression-language": "~2.8|~3.0", 1025 | "symfony/finder": "~2.8|~3.0", 1026 | "symfony/process": "~2.8|~3.0", 1027 | "symfony/routing": "~2.8|~3.0", 1028 | "symfony/stopwatch": "~2.8|~3.0", 1029 | "symfony/templating": "~2.8|~3.0", 1030 | "symfony/translation": "~2.8|~3.0", 1031 | "symfony/var-dumper": "~2.8|~3.0" 1032 | }, 1033 | "suggest": { 1034 | "symfony/browser-kit": "", 1035 | "symfony/class-loader": "", 1036 | "symfony/config": "", 1037 | "symfony/console": "", 1038 | "symfony/dependency-injection": "", 1039 | "symfony/finder": "", 1040 | "symfony/var-dumper": "" 1041 | }, 1042 | "type": "library", 1043 | "extra": { 1044 | "branch-alias": { 1045 | "dev-master": "3.1-dev" 1046 | } 1047 | }, 1048 | "autoload": { 1049 | "psr-4": { 1050 | "Symfony\\Component\\HttpKernel\\": "" 1051 | }, 1052 | "exclude-from-classmap": [ 1053 | "/Tests/" 1054 | ] 1055 | }, 1056 | "notification-url": "https://packagist.org/downloads/", 1057 | "license": [ 1058 | "MIT" 1059 | ], 1060 | "authors": [ 1061 | { 1062 | "name": "Fabien Potencier", 1063 | "email": "fabien@symfony.com" 1064 | }, 1065 | { 1066 | "name": "Symfony Community", 1067 | "homepage": "https://symfony.com/contributors" 1068 | } 1069 | ], 1070 | "description": "Symfony HttpKernel Component", 1071 | "homepage": "https://symfony.com", 1072 | "time": "2016-10-03 19:01:06" 1073 | }, 1074 | { 1075 | "name": "symfony/polyfill-mbstring", 1076 | "version": "v1.2.0", 1077 | "source": { 1078 | "type": "git", 1079 | "url": "https://github.com/symfony/polyfill-mbstring.git", 1080 | "reference": "dff51f72b0706335131b00a7f49606168c582594" 1081 | }, 1082 | "dist": { 1083 | "type": "zip", 1084 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/dff51f72b0706335131b00a7f49606168c582594", 1085 | "reference": "dff51f72b0706335131b00a7f49606168c582594", 1086 | "shasum": "" 1087 | }, 1088 | "require": { 1089 | "php": ">=5.3.3" 1090 | }, 1091 | "suggest": { 1092 | "ext-mbstring": "For best performance" 1093 | }, 1094 | "type": "library", 1095 | "extra": { 1096 | "branch-alias": { 1097 | "dev-master": "1.2-dev" 1098 | } 1099 | }, 1100 | "autoload": { 1101 | "psr-4": { 1102 | "Symfony\\Polyfill\\Mbstring\\": "" 1103 | }, 1104 | "files": [ 1105 | "bootstrap.php" 1106 | ] 1107 | }, 1108 | "notification-url": "https://packagist.org/downloads/", 1109 | "license": [ 1110 | "MIT" 1111 | ], 1112 | "authors": [ 1113 | { 1114 | "name": "Nicolas Grekas", 1115 | "email": "p@tchwork.com" 1116 | }, 1117 | { 1118 | "name": "Symfony Community", 1119 | "homepage": "https://symfony.com/contributors" 1120 | } 1121 | ], 1122 | "description": "Symfony polyfill for the Mbstring extension", 1123 | "homepage": "https://symfony.com", 1124 | "keywords": [ 1125 | "compatibility", 1126 | "mbstring", 1127 | "polyfill", 1128 | "portable", 1129 | "shim" 1130 | ], 1131 | "time": "2016-05-18 14:26:46" 1132 | }, 1133 | { 1134 | "name": "symfony/routing", 1135 | "version": "v3.1.5", 1136 | "source": { 1137 | "type": "git", 1138 | "url": "https://github.com/symfony/routing.git", 1139 | "reference": "8edf62498a1a4c57ba317664a4b698339c10cdf6" 1140 | }, 1141 | "dist": { 1142 | "type": "zip", 1143 | "url": "https://api.github.com/repos/symfony/routing/zipball/8edf62498a1a4c57ba317664a4b698339c10cdf6", 1144 | "reference": "8edf62498a1a4c57ba317664a4b698339c10cdf6", 1145 | "shasum": "" 1146 | }, 1147 | "require": { 1148 | "php": ">=5.5.9" 1149 | }, 1150 | "conflict": { 1151 | "symfony/config": "<2.8" 1152 | }, 1153 | "require-dev": { 1154 | "doctrine/annotations": "~1.0", 1155 | "doctrine/common": "~2.2", 1156 | "psr/log": "~1.0", 1157 | "symfony/config": "~2.8|~3.0", 1158 | "symfony/expression-language": "~2.8|~3.0", 1159 | "symfony/http-foundation": "~2.8|~3.0", 1160 | "symfony/yaml": "~2.8|~3.0" 1161 | }, 1162 | "suggest": { 1163 | "doctrine/annotations": "For using the annotation loader", 1164 | "symfony/config": "For using the all-in-one router or any loader", 1165 | "symfony/dependency-injection": "For loading routes from a service", 1166 | "symfony/expression-language": "For using expression matching", 1167 | "symfony/http-foundation": "For using a Symfony Request object", 1168 | "symfony/yaml": "For using the YAML loader" 1169 | }, 1170 | "type": "library", 1171 | "extra": { 1172 | "branch-alias": { 1173 | "dev-master": "3.1-dev" 1174 | } 1175 | }, 1176 | "autoload": { 1177 | "psr-4": { 1178 | "Symfony\\Component\\Routing\\": "" 1179 | }, 1180 | "exclude-from-classmap": [ 1181 | "/Tests/" 1182 | ] 1183 | }, 1184 | "notification-url": "https://packagist.org/downloads/", 1185 | "license": [ 1186 | "MIT" 1187 | ], 1188 | "authors": [ 1189 | { 1190 | "name": "Fabien Potencier", 1191 | "email": "fabien@symfony.com" 1192 | }, 1193 | { 1194 | "name": "Symfony Community", 1195 | "homepage": "https://symfony.com/contributors" 1196 | } 1197 | ], 1198 | "description": "Symfony Routing Component", 1199 | "homepage": "https://symfony.com", 1200 | "keywords": [ 1201 | "router", 1202 | "routing", 1203 | "uri", 1204 | "url" 1205 | ], 1206 | "time": "2016-08-16 14:58:24" 1207 | }, 1208 | { 1209 | "name": "symfony/translation", 1210 | "version": "v3.1.5", 1211 | "source": { 1212 | "type": "git", 1213 | "url": "https://github.com/symfony/translation.git", 1214 | "reference": "93013a18d272e59dab8e67f583155b78c68947eb" 1215 | }, 1216 | "dist": { 1217 | "type": "zip", 1218 | "url": "https://api.github.com/repos/symfony/translation/zipball/93013a18d272e59dab8e67f583155b78c68947eb", 1219 | "reference": "93013a18d272e59dab8e67f583155b78c68947eb", 1220 | "shasum": "" 1221 | }, 1222 | "require": { 1223 | "php": ">=5.5.9", 1224 | "symfony/polyfill-mbstring": "~1.0" 1225 | }, 1226 | "conflict": { 1227 | "symfony/config": "<2.8" 1228 | }, 1229 | "require-dev": { 1230 | "psr/log": "~1.0", 1231 | "symfony/config": "~2.8|~3.0", 1232 | "symfony/intl": "~2.8|~3.0", 1233 | "symfony/yaml": "~2.8|~3.0" 1234 | }, 1235 | "suggest": { 1236 | "psr/log": "To use logging capability in translator", 1237 | "symfony/config": "", 1238 | "symfony/yaml": "" 1239 | }, 1240 | "type": "library", 1241 | "extra": { 1242 | "branch-alias": { 1243 | "dev-master": "3.1-dev" 1244 | } 1245 | }, 1246 | "autoload": { 1247 | "psr-4": { 1248 | "Symfony\\Component\\Translation\\": "" 1249 | }, 1250 | "exclude-from-classmap": [ 1251 | "/Tests/" 1252 | ] 1253 | }, 1254 | "notification-url": "https://packagist.org/downloads/", 1255 | "license": [ 1256 | "MIT" 1257 | ], 1258 | "authors": [ 1259 | { 1260 | "name": "Fabien Potencier", 1261 | "email": "fabien@symfony.com" 1262 | }, 1263 | { 1264 | "name": "Symfony Community", 1265 | "homepage": "https://symfony.com/contributors" 1266 | } 1267 | ], 1268 | "description": "Symfony Translation Component", 1269 | "homepage": "https://symfony.com", 1270 | "time": "2016-09-06 11:02:40" 1271 | } 1272 | ], 1273 | "packages-dev": [ 1274 | { 1275 | "name": "hamcrest/hamcrest-php", 1276 | "version": "v1.2.2", 1277 | "source": { 1278 | "type": "git", 1279 | "url": "https://github.com/hamcrest/hamcrest-php.git", 1280 | "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c" 1281 | }, 1282 | "dist": { 1283 | "type": "zip", 1284 | "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/b37020aa976fa52d3de9aa904aa2522dc518f79c", 1285 | "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c", 1286 | "shasum": "" 1287 | }, 1288 | "require": { 1289 | "php": ">=5.3.2" 1290 | }, 1291 | "replace": { 1292 | "cordoval/hamcrest-php": "*", 1293 | "davedevelopment/hamcrest-php": "*", 1294 | "kodova/hamcrest-php": "*" 1295 | }, 1296 | "require-dev": { 1297 | "phpunit/php-file-iterator": "1.3.3", 1298 | "satooshi/php-coveralls": "dev-master" 1299 | }, 1300 | "type": "library", 1301 | "autoload": { 1302 | "classmap": [ 1303 | "hamcrest" 1304 | ], 1305 | "files": [ 1306 | "hamcrest/Hamcrest.php" 1307 | ] 1308 | }, 1309 | "notification-url": "https://packagist.org/downloads/", 1310 | "license": [ 1311 | "BSD" 1312 | ], 1313 | "description": "This is the PHP port of Hamcrest Matchers", 1314 | "keywords": [ 1315 | "test" 1316 | ], 1317 | "time": "2015-05-11 14:41:42" 1318 | }, 1319 | { 1320 | "name": "mockery/mockery", 1321 | "version": "0.9.5", 1322 | "source": { 1323 | "type": "git", 1324 | "url": "https://github.com/padraic/mockery.git", 1325 | "reference": "4db079511a283e5aba1b3c2fb19037c645e70fc2" 1326 | }, 1327 | "dist": { 1328 | "type": "zip", 1329 | "url": "https://api.github.com/repos/padraic/mockery/zipball/4db079511a283e5aba1b3c2fb19037c645e70fc2", 1330 | "reference": "4db079511a283e5aba1b3c2fb19037c645e70fc2", 1331 | "shasum": "" 1332 | }, 1333 | "require": { 1334 | "hamcrest/hamcrest-php": "~1.1", 1335 | "lib-pcre": ">=7.0", 1336 | "php": ">=5.3.2" 1337 | }, 1338 | "require-dev": { 1339 | "phpunit/phpunit": "~4.0" 1340 | }, 1341 | "type": "library", 1342 | "extra": { 1343 | "branch-alias": { 1344 | "dev-master": "0.9.x-dev" 1345 | } 1346 | }, 1347 | "autoload": { 1348 | "psr-0": { 1349 | "Mockery": "library/" 1350 | } 1351 | }, 1352 | "notification-url": "https://packagist.org/downloads/", 1353 | "license": [ 1354 | "BSD-3-Clause" 1355 | ], 1356 | "authors": [ 1357 | { 1358 | "name": "Pádraic Brady", 1359 | "email": "padraic.brady@gmail.com", 1360 | "homepage": "http://blog.astrumfutura.com" 1361 | }, 1362 | { 1363 | "name": "Dave Marshall", 1364 | "email": "dave.marshall@atstsolutions.co.uk", 1365 | "homepage": "http://davedevelopment.co.uk" 1366 | } 1367 | ], 1368 | "description": "Mockery is a simple yet flexible PHP mock object framework for use in unit testing with PHPUnit, PHPSpec or any other testing framework. Its core goal is to offer a test double framework with a succinct API capable of clearly defining all possible object operations and interactions using a human readable Domain Specific Language (DSL). Designed as a drop in alternative to PHPUnit's phpunit-mock-objects library, Mockery is easy to integrate with PHPUnit and can operate alongside phpunit-mock-objects without the World ending.", 1369 | "homepage": "http://github.com/padraic/mockery", 1370 | "keywords": [ 1371 | "BDD", 1372 | "TDD", 1373 | "library", 1374 | "mock", 1375 | "mock objects", 1376 | "mockery", 1377 | "stub", 1378 | "test", 1379 | "test double", 1380 | "testing" 1381 | ], 1382 | "time": "2016-05-22 21:52:33" 1383 | }, 1384 | { 1385 | "name": "phpunit/php-code-coverage", 1386 | "version": "2.2.4", 1387 | "source": { 1388 | "type": "git", 1389 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 1390 | "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" 1391 | }, 1392 | "dist": { 1393 | "type": "zip", 1394 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", 1395 | "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", 1396 | "shasum": "" 1397 | }, 1398 | "require": { 1399 | "php": ">=5.3.3", 1400 | "phpunit/php-file-iterator": "~1.3", 1401 | "phpunit/php-text-template": "~1.2", 1402 | "phpunit/php-token-stream": "~1.3", 1403 | "sebastian/environment": "^1.3.2", 1404 | "sebastian/version": "~1.0" 1405 | }, 1406 | "require-dev": { 1407 | "ext-xdebug": ">=2.1.4", 1408 | "phpunit/phpunit": "~4" 1409 | }, 1410 | "suggest": { 1411 | "ext-dom": "*", 1412 | "ext-xdebug": ">=2.2.1", 1413 | "ext-xmlwriter": "*" 1414 | }, 1415 | "type": "library", 1416 | "extra": { 1417 | "branch-alias": { 1418 | "dev-master": "2.2.x-dev" 1419 | } 1420 | }, 1421 | "autoload": { 1422 | "classmap": [ 1423 | "src/" 1424 | ] 1425 | }, 1426 | "notification-url": "https://packagist.org/downloads/", 1427 | "license": [ 1428 | "BSD-3-Clause" 1429 | ], 1430 | "authors": [ 1431 | { 1432 | "name": "Sebastian Bergmann", 1433 | "email": "sb@sebastian-bergmann.de", 1434 | "role": "lead" 1435 | } 1436 | ], 1437 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 1438 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 1439 | "keywords": [ 1440 | "coverage", 1441 | "testing", 1442 | "xunit" 1443 | ], 1444 | "time": "2015-10-06 15:47:00" 1445 | }, 1446 | { 1447 | "name": "phpunit/php-file-iterator", 1448 | "version": "1.3.4", 1449 | "source": { 1450 | "type": "git", 1451 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 1452 | "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb" 1453 | }, 1454 | "dist": { 1455 | "type": "zip", 1456 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/acd690379117b042d1c8af1fafd61bde001bf6bb", 1457 | "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb", 1458 | "shasum": "" 1459 | }, 1460 | "require": { 1461 | "php": ">=5.3.3" 1462 | }, 1463 | "type": "library", 1464 | "autoload": { 1465 | "classmap": [ 1466 | "File/" 1467 | ] 1468 | }, 1469 | "notification-url": "https://packagist.org/downloads/", 1470 | "include-path": [ 1471 | "" 1472 | ], 1473 | "license": [ 1474 | "BSD-3-Clause" 1475 | ], 1476 | "authors": [ 1477 | { 1478 | "name": "Sebastian Bergmann", 1479 | "email": "sb@sebastian-bergmann.de", 1480 | "role": "lead" 1481 | } 1482 | ], 1483 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 1484 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 1485 | "keywords": [ 1486 | "filesystem", 1487 | "iterator" 1488 | ], 1489 | "time": "2013-10-10 15:34:57" 1490 | }, 1491 | { 1492 | "name": "phpunit/php-text-template", 1493 | "version": "1.2.1", 1494 | "source": { 1495 | "type": "git", 1496 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 1497 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 1498 | }, 1499 | "dist": { 1500 | "type": "zip", 1501 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1502 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1503 | "shasum": "" 1504 | }, 1505 | "require": { 1506 | "php": ">=5.3.3" 1507 | }, 1508 | "type": "library", 1509 | "autoload": { 1510 | "classmap": [ 1511 | "src/" 1512 | ] 1513 | }, 1514 | "notification-url": "https://packagist.org/downloads/", 1515 | "license": [ 1516 | "BSD-3-Clause" 1517 | ], 1518 | "authors": [ 1519 | { 1520 | "name": "Sebastian Bergmann", 1521 | "email": "sebastian@phpunit.de", 1522 | "role": "lead" 1523 | } 1524 | ], 1525 | "description": "Simple template engine.", 1526 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 1527 | "keywords": [ 1528 | "template" 1529 | ], 1530 | "time": "2015-06-21 13:50:34" 1531 | }, 1532 | { 1533 | "name": "phpunit/php-timer", 1534 | "version": "1.0.8", 1535 | "source": { 1536 | "type": "git", 1537 | "url": "https://github.com/sebastianbergmann/php-timer.git", 1538 | "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" 1539 | }, 1540 | "dist": { 1541 | "type": "zip", 1542 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", 1543 | "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", 1544 | "shasum": "" 1545 | }, 1546 | "require": { 1547 | "php": ">=5.3.3" 1548 | }, 1549 | "require-dev": { 1550 | "phpunit/phpunit": "~4|~5" 1551 | }, 1552 | "type": "library", 1553 | "autoload": { 1554 | "classmap": [ 1555 | "src/" 1556 | ] 1557 | }, 1558 | "notification-url": "https://packagist.org/downloads/", 1559 | "license": [ 1560 | "BSD-3-Clause" 1561 | ], 1562 | "authors": [ 1563 | { 1564 | "name": "Sebastian Bergmann", 1565 | "email": "sb@sebastian-bergmann.de", 1566 | "role": "lead" 1567 | } 1568 | ], 1569 | "description": "Utility class for timing", 1570 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 1571 | "keywords": [ 1572 | "timer" 1573 | ], 1574 | "time": "2016-05-12 18:03:57" 1575 | }, 1576 | { 1577 | "name": "phpunit/php-token-stream", 1578 | "version": "1.4.8", 1579 | "source": { 1580 | "type": "git", 1581 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 1582 | "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" 1583 | }, 1584 | "dist": { 1585 | "type": "zip", 1586 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", 1587 | "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", 1588 | "shasum": "" 1589 | }, 1590 | "require": { 1591 | "ext-tokenizer": "*", 1592 | "php": ">=5.3.3" 1593 | }, 1594 | "require-dev": { 1595 | "phpunit/phpunit": "~4.2" 1596 | }, 1597 | "type": "library", 1598 | "extra": { 1599 | "branch-alias": { 1600 | "dev-master": "1.4-dev" 1601 | } 1602 | }, 1603 | "autoload": { 1604 | "classmap": [ 1605 | "src/" 1606 | ] 1607 | }, 1608 | "notification-url": "https://packagist.org/downloads/", 1609 | "license": [ 1610 | "BSD-3-Clause" 1611 | ], 1612 | "authors": [ 1613 | { 1614 | "name": "Sebastian Bergmann", 1615 | "email": "sebastian@phpunit.de" 1616 | } 1617 | ], 1618 | "description": "Wrapper around PHP's tokenizer extension.", 1619 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 1620 | "keywords": [ 1621 | "tokenizer" 1622 | ], 1623 | "time": "2015-09-15 10:49:45" 1624 | }, 1625 | { 1626 | "name": "phpunit/phpunit", 1627 | "version": "4.1.6", 1628 | "source": { 1629 | "type": "git", 1630 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1631 | "reference": "241116219bb7e3b8111a36ffd8f37546888738d6" 1632 | }, 1633 | "dist": { 1634 | "type": "zip", 1635 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/241116219bb7e3b8111a36ffd8f37546888738d6", 1636 | "reference": "241116219bb7e3b8111a36ffd8f37546888738d6", 1637 | "shasum": "" 1638 | }, 1639 | "require": { 1640 | "ext-dom": "*", 1641 | "ext-json": "*", 1642 | "ext-pcre": "*", 1643 | "ext-reflection": "*", 1644 | "ext-spl": "*", 1645 | "php": ">=5.3.3", 1646 | "phpunit/php-code-coverage": "~2.0", 1647 | "phpunit/php-file-iterator": "~1.3.1", 1648 | "phpunit/php-text-template": "~1.2", 1649 | "phpunit/php-timer": "~1.0.2", 1650 | "phpunit/phpunit-mock-objects": "2.1.5", 1651 | "sebastian/comparator": "~1.0", 1652 | "sebastian/diff": "~1.1", 1653 | "sebastian/environment": "~1.0", 1654 | "sebastian/exporter": "~1.0", 1655 | "sebastian/version": "~1.0", 1656 | "symfony/yaml": "~2.0" 1657 | }, 1658 | "suggest": { 1659 | "phpunit/php-invoker": "~1.1" 1660 | }, 1661 | "bin": [ 1662 | "phpunit" 1663 | ], 1664 | "type": "library", 1665 | "extra": { 1666 | "branch-alias": { 1667 | "dev-master": "4.1.x-dev" 1668 | } 1669 | }, 1670 | "autoload": { 1671 | "classmap": [ 1672 | "src/" 1673 | ] 1674 | }, 1675 | "notification-url": "https://packagist.org/downloads/", 1676 | "include-path": [ 1677 | "", 1678 | "../../symfony/yaml/" 1679 | ], 1680 | "license": [ 1681 | "BSD-3-Clause" 1682 | ], 1683 | "authors": [ 1684 | { 1685 | "name": "Sebastian Bergmann", 1686 | "email": "sebastian@phpunit.de", 1687 | "role": "lead" 1688 | } 1689 | ], 1690 | "description": "The PHP Unit Testing framework.", 1691 | "homepage": "http://www.phpunit.de/", 1692 | "keywords": [ 1693 | "phpunit", 1694 | "testing", 1695 | "xunit" 1696 | ], 1697 | "time": "2014-08-17 08:07:02" 1698 | }, 1699 | { 1700 | "name": "phpunit/phpunit-mock-objects", 1701 | "version": "2.1.5", 1702 | "source": { 1703 | "type": "git", 1704 | "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", 1705 | "reference": "7878b9c41edb3afab92b85edf5f0981014a2713a" 1706 | }, 1707 | "dist": { 1708 | "type": "zip", 1709 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/7878b9c41edb3afab92b85edf5f0981014a2713a", 1710 | "reference": "7878b9c41edb3afab92b85edf5f0981014a2713a", 1711 | "shasum": "" 1712 | }, 1713 | "require": { 1714 | "php": ">=5.3.3", 1715 | "phpunit/php-text-template": "~1.2" 1716 | }, 1717 | "require-dev": { 1718 | "phpunit/phpunit": "~4.1" 1719 | }, 1720 | "suggest": { 1721 | "ext-soap": "*" 1722 | }, 1723 | "type": "library", 1724 | "extra": { 1725 | "branch-alias": { 1726 | "dev-master": "2.1.x-dev" 1727 | } 1728 | }, 1729 | "autoload": { 1730 | "classmap": [ 1731 | "src/" 1732 | ] 1733 | }, 1734 | "notification-url": "https://packagist.org/downloads/", 1735 | "include-path": [ 1736 | "" 1737 | ], 1738 | "license": [ 1739 | "BSD-3-Clause" 1740 | ], 1741 | "authors": [ 1742 | { 1743 | "name": "Sebastian Bergmann", 1744 | "email": "sb@sebastian-bergmann.de", 1745 | "role": "lead" 1746 | } 1747 | ], 1748 | "description": "Mock Object library for PHPUnit", 1749 | "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", 1750 | "keywords": [ 1751 | "mock", 1752 | "xunit" 1753 | ], 1754 | "time": "2014-06-12 07:22:15" 1755 | }, 1756 | { 1757 | "name": "sebastian/comparator", 1758 | "version": "1.2.0", 1759 | "source": { 1760 | "type": "git", 1761 | "url": "https://github.com/sebastianbergmann/comparator.git", 1762 | "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" 1763 | }, 1764 | "dist": { 1765 | "type": "zip", 1766 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", 1767 | "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", 1768 | "shasum": "" 1769 | }, 1770 | "require": { 1771 | "php": ">=5.3.3", 1772 | "sebastian/diff": "~1.2", 1773 | "sebastian/exporter": "~1.2" 1774 | }, 1775 | "require-dev": { 1776 | "phpunit/phpunit": "~4.4" 1777 | }, 1778 | "type": "library", 1779 | "extra": { 1780 | "branch-alias": { 1781 | "dev-master": "1.2.x-dev" 1782 | } 1783 | }, 1784 | "autoload": { 1785 | "classmap": [ 1786 | "src/" 1787 | ] 1788 | }, 1789 | "notification-url": "https://packagist.org/downloads/", 1790 | "license": [ 1791 | "BSD-3-Clause" 1792 | ], 1793 | "authors": [ 1794 | { 1795 | "name": "Jeff Welch", 1796 | "email": "whatthejeff@gmail.com" 1797 | }, 1798 | { 1799 | "name": "Volker Dusch", 1800 | "email": "github@wallbash.com" 1801 | }, 1802 | { 1803 | "name": "Bernhard Schussek", 1804 | "email": "bschussek@2bepublished.at" 1805 | }, 1806 | { 1807 | "name": "Sebastian Bergmann", 1808 | "email": "sebastian@phpunit.de" 1809 | } 1810 | ], 1811 | "description": "Provides the functionality to compare PHP values for equality", 1812 | "homepage": "http://www.github.com/sebastianbergmann/comparator", 1813 | "keywords": [ 1814 | "comparator", 1815 | "compare", 1816 | "equality" 1817 | ], 1818 | "time": "2015-07-26 15:48:44" 1819 | }, 1820 | { 1821 | "name": "sebastian/diff", 1822 | "version": "1.4.1", 1823 | "source": { 1824 | "type": "git", 1825 | "url": "https://github.com/sebastianbergmann/diff.git", 1826 | "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" 1827 | }, 1828 | "dist": { 1829 | "type": "zip", 1830 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", 1831 | "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", 1832 | "shasum": "" 1833 | }, 1834 | "require": { 1835 | "php": ">=5.3.3" 1836 | }, 1837 | "require-dev": { 1838 | "phpunit/phpunit": "~4.8" 1839 | }, 1840 | "type": "library", 1841 | "extra": { 1842 | "branch-alias": { 1843 | "dev-master": "1.4-dev" 1844 | } 1845 | }, 1846 | "autoload": { 1847 | "classmap": [ 1848 | "src/" 1849 | ] 1850 | }, 1851 | "notification-url": "https://packagist.org/downloads/", 1852 | "license": [ 1853 | "BSD-3-Clause" 1854 | ], 1855 | "authors": [ 1856 | { 1857 | "name": "Kore Nordmann", 1858 | "email": "mail@kore-nordmann.de" 1859 | }, 1860 | { 1861 | "name": "Sebastian Bergmann", 1862 | "email": "sebastian@phpunit.de" 1863 | } 1864 | ], 1865 | "description": "Diff implementation", 1866 | "homepage": "https://github.com/sebastianbergmann/diff", 1867 | "keywords": [ 1868 | "diff" 1869 | ], 1870 | "time": "2015-12-08 07:14:41" 1871 | }, 1872 | { 1873 | "name": "sebastian/environment", 1874 | "version": "1.3.8", 1875 | "source": { 1876 | "type": "git", 1877 | "url": "https://github.com/sebastianbergmann/environment.git", 1878 | "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" 1879 | }, 1880 | "dist": { 1881 | "type": "zip", 1882 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", 1883 | "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", 1884 | "shasum": "" 1885 | }, 1886 | "require": { 1887 | "php": "^5.3.3 || ^7.0" 1888 | }, 1889 | "require-dev": { 1890 | "phpunit/phpunit": "^4.8 || ^5.0" 1891 | }, 1892 | "type": "library", 1893 | "extra": { 1894 | "branch-alias": { 1895 | "dev-master": "1.3.x-dev" 1896 | } 1897 | }, 1898 | "autoload": { 1899 | "classmap": [ 1900 | "src/" 1901 | ] 1902 | }, 1903 | "notification-url": "https://packagist.org/downloads/", 1904 | "license": [ 1905 | "BSD-3-Clause" 1906 | ], 1907 | "authors": [ 1908 | { 1909 | "name": "Sebastian Bergmann", 1910 | "email": "sebastian@phpunit.de" 1911 | } 1912 | ], 1913 | "description": "Provides functionality to handle HHVM/PHP environments", 1914 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1915 | "keywords": [ 1916 | "Xdebug", 1917 | "environment", 1918 | "hhvm" 1919 | ], 1920 | "time": "2016-08-18 05:49:44" 1921 | }, 1922 | { 1923 | "name": "sebastian/exporter", 1924 | "version": "1.2.2", 1925 | "source": { 1926 | "type": "git", 1927 | "url": "https://github.com/sebastianbergmann/exporter.git", 1928 | "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" 1929 | }, 1930 | "dist": { 1931 | "type": "zip", 1932 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", 1933 | "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", 1934 | "shasum": "" 1935 | }, 1936 | "require": { 1937 | "php": ">=5.3.3", 1938 | "sebastian/recursion-context": "~1.0" 1939 | }, 1940 | "require-dev": { 1941 | "ext-mbstring": "*", 1942 | "phpunit/phpunit": "~4.4" 1943 | }, 1944 | "type": "library", 1945 | "extra": { 1946 | "branch-alias": { 1947 | "dev-master": "1.3.x-dev" 1948 | } 1949 | }, 1950 | "autoload": { 1951 | "classmap": [ 1952 | "src/" 1953 | ] 1954 | }, 1955 | "notification-url": "https://packagist.org/downloads/", 1956 | "license": [ 1957 | "BSD-3-Clause" 1958 | ], 1959 | "authors": [ 1960 | { 1961 | "name": "Jeff Welch", 1962 | "email": "whatthejeff@gmail.com" 1963 | }, 1964 | { 1965 | "name": "Volker Dusch", 1966 | "email": "github@wallbash.com" 1967 | }, 1968 | { 1969 | "name": "Bernhard Schussek", 1970 | "email": "bschussek@2bepublished.at" 1971 | }, 1972 | { 1973 | "name": "Sebastian Bergmann", 1974 | "email": "sebastian@phpunit.de" 1975 | }, 1976 | { 1977 | "name": "Adam Harvey", 1978 | "email": "aharvey@php.net" 1979 | } 1980 | ], 1981 | "description": "Provides the functionality to export PHP variables for visualization", 1982 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 1983 | "keywords": [ 1984 | "export", 1985 | "exporter" 1986 | ], 1987 | "time": "2016-06-17 09:04:28" 1988 | }, 1989 | { 1990 | "name": "sebastian/recursion-context", 1991 | "version": "1.0.2", 1992 | "source": { 1993 | "type": "git", 1994 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1995 | "reference": "913401df809e99e4f47b27cdd781f4a258d58791" 1996 | }, 1997 | "dist": { 1998 | "type": "zip", 1999 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", 2000 | "reference": "913401df809e99e4f47b27cdd781f4a258d58791", 2001 | "shasum": "" 2002 | }, 2003 | "require": { 2004 | "php": ">=5.3.3" 2005 | }, 2006 | "require-dev": { 2007 | "phpunit/phpunit": "~4.4" 2008 | }, 2009 | "type": "library", 2010 | "extra": { 2011 | "branch-alias": { 2012 | "dev-master": "1.0.x-dev" 2013 | } 2014 | }, 2015 | "autoload": { 2016 | "classmap": [ 2017 | "src/" 2018 | ] 2019 | }, 2020 | "notification-url": "https://packagist.org/downloads/", 2021 | "license": [ 2022 | "BSD-3-Clause" 2023 | ], 2024 | "authors": [ 2025 | { 2026 | "name": "Jeff Welch", 2027 | "email": "whatthejeff@gmail.com" 2028 | }, 2029 | { 2030 | "name": "Sebastian Bergmann", 2031 | "email": "sebastian@phpunit.de" 2032 | }, 2033 | { 2034 | "name": "Adam Harvey", 2035 | "email": "aharvey@php.net" 2036 | } 2037 | ], 2038 | "description": "Provides functionality to recursively process PHP variables", 2039 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 2040 | "time": "2015-11-11 19:50:13" 2041 | }, 2042 | { 2043 | "name": "sebastian/version", 2044 | "version": "1.0.6", 2045 | "source": { 2046 | "type": "git", 2047 | "url": "https://github.com/sebastianbergmann/version.git", 2048 | "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" 2049 | }, 2050 | "dist": { 2051 | "type": "zip", 2052 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", 2053 | "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", 2054 | "shasum": "" 2055 | }, 2056 | "type": "library", 2057 | "autoload": { 2058 | "classmap": [ 2059 | "src/" 2060 | ] 2061 | }, 2062 | "notification-url": "https://packagist.org/downloads/", 2063 | "license": [ 2064 | "BSD-3-Clause" 2065 | ], 2066 | "authors": [ 2067 | { 2068 | "name": "Sebastian Bergmann", 2069 | "email": "sebastian@phpunit.de", 2070 | "role": "lead" 2071 | } 2072 | ], 2073 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 2074 | "homepage": "https://github.com/sebastianbergmann/version", 2075 | "time": "2015-06-21 13:59:46" 2076 | }, 2077 | { 2078 | "name": "symfony/yaml", 2079 | "version": "v2.8.12", 2080 | "source": { 2081 | "type": "git", 2082 | "url": "https://github.com/symfony/yaml.git", 2083 | "reference": "e7540734bad981fe59f8ef14b6fc194ae9df8d9c" 2084 | }, 2085 | "dist": { 2086 | "type": "zip", 2087 | "url": "https://api.github.com/repos/symfony/yaml/zipball/e7540734bad981fe59f8ef14b6fc194ae9df8d9c", 2088 | "reference": "e7540734bad981fe59f8ef14b6fc194ae9df8d9c", 2089 | "shasum": "" 2090 | }, 2091 | "require": { 2092 | "php": ">=5.3.9" 2093 | }, 2094 | "type": "library", 2095 | "extra": { 2096 | "branch-alias": { 2097 | "dev-master": "2.8-dev" 2098 | } 2099 | }, 2100 | "autoload": { 2101 | "psr-4": { 2102 | "Symfony\\Component\\Yaml\\": "" 2103 | }, 2104 | "exclude-from-classmap": [ 2105 | "/Tests/" 2106 | ] 2107 | }, 2108 | "notification-url": "https://packagist.org/downloads/", 2109 | "license": [ 2110 | "MIT" 2111 | ], 2112 | "authors": [ 2113 | { 2114 | "name": "Fabien Potencier", 2115 | "email": "fabien@symfony.com" 2116 | }, 2117 | { 2118 | "name": "Symfony Community", 2119 | "homepage": "https://symfony.com/contributors" 2120 | } 2121 | ], 2122 | "description": "Symfony Yaml Component", 2123 | "homepage": "https://symfony.com", 2124 | "time": "2016-09-02 01:57:56" 2125 | } 2126 | ], 2127 | "aliases": [], 2128 | "minimum-stability": "stable", 2129 | "stability-flags": [], 2130 | "prefer-stable": false, 2131 | "prefer-lowest": false, 2132 | "platform": [], 2133 | "platform-dev": [] 2134 | } 2135 | -------------------------------------------------------------------------------- /config/dev.php: -------------------------------------------------------------------------------- 1 | 'pdo_sqlite', 9 | 'path' => realpath(ROOT_PATH . '/app.db'), 10 | ); 11 | -------------------------------------------------------------------------------- /config/prod.php: -------------------------------------------------------------------------------- 1 | 'pdo_mysql', 12 | 'user' => 'user', 13 | 'password' => 'password', 14 | 'dbname' => 'mydb', 15 | 'host' => 'localhost', 16 | ); 17 | -------------------------------------------------------------------------------- /database/migrations/20170514200429_user_table_migration.php: -------------------------------------------------------------------------------- 1 | table('users'); 13 | $users->addColumn('username', 'string', array('limit' => 120)) 14 | ->addColumn('email', 'string', array('limit' => 40)) 15 | ->addColumn('first_name', 'string', array('limit' => 30)) 16 | ->addColumn('last_name', 'string', array('limit' => 30)) 17 | ->addColumn('address', 'string', array('limit' => 230, 'null' => true)) 18 | ->addIndex(array('username', 'email'), array('unique' => true)) 19 | ->save(); 20 | } 21 | 22 | /** 23 | * Roll back migration 24 | */ 25 | public function down() 26 | { 27 | $this->dropTable('users'); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /database/seeds/UserSeeder.php: -------------------------------------------------------------------------------- 1 | $faker->userName, 22 | 'email' => $faker->safeEmail, 23 | 'first_name' => $faker->firstName, 24 | 'last_name' => $faker->lastName, 25 | 'address' => $faker->address, 26 | ]; 27 | } 28 | 29 | $this->insert('users', $data); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-eitable-table-grid", 3 | "description": "A Vue.js project", 4 | "version": "1.0.0", 5 | "author": "al0mie ", 6 | "private": true, 7 | "scripts": { 8 | "dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot", 9 | "build": "cross-env NODE_ENV=production webpack --progress --hide-modules" 10 | }, 11 | "dependencies": { 12 | "axios": "^0.16.1", 13 | "bootstrap": "^3.3.7", 14 | "vue": "^2.2.1", 15 | "vue-axios": "^2.0.2" 16 | }, 17 | "devDependencies": { 18 | "babel-core": "^6.0.0", 19 | "babel-loader": "^6.0.0", 20 | "babel-preset-latest": "^6.0.0", 21 | "cross-env": "^3.0.0", 22 | "file-loader": "^0.9.0", 23 | "node-sass": "^4.5.0", 24 | "sass-loader": "^5.0.1", 25 | "vue-loader": "^11.1.4", 26 | "vue-template-compiler": "^2.2.1", 27 | "webpack": "^2.2.0", 28 | "webpack-dev-server": "^2.2.0" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /phinx.yml: -------------------------------------------------------------------------------- 1 | paths: 2 | migrations: %%PHINX_CONFIG_DIR%%/database/migrations 3 | seeds: %%PHINX_CONFIG_DIR%%/database/seeds 4 | 5 | environments: 6 | default_migration_table: phinxlog 7 | default_database: development 8 | production: 9 | adapter: mysql 10 | host: localhost 11 | name: production_db 12 | user: root 13 | pass: '' 14 | port: 3306 15 | charset: utf8 16 | 17 | development: 18 | adapter: mysql 19 | host: localhost 20 | name: development_db 21 | user: root 22 | pass: '' 23 | port: 3306 24 | charset: utf8 25 | 26 | testing: 27 | adapter: mysql 28 | host: localhost 29 | name: testing_db 30 | user: root 31 | pass: '' 32 | port: 3306 33 | charset: utf8 34 | 35 | version_order: creation -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 13 | 14 | 15 | 16 | 17 | 18 | ./tests 19 | 20 | 21 | -------------------------------------------------------------------------------- /resources/assets/js/app.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import example from './components/Example.vue'; 3 | window.axios = require('axios'); 4 | 5 | /** 6 | * Next, we will create a fresh Vue application instance and attach it to 7 | * the page. Then, you may begin adding components to this application 8 | * or customize the JavaScript scaffolding to fit your unique needs. 9 | */ 10 | const app = new Vue({ 11 | el: '#app', 12 | components: { 13 | 'example' : example 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /resources/assets/js/components/CreateItemForm.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | -------------------------------------------------------------------------------- /resources/assets/js/components/EditableTableGrid.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 156 | -------------------------------------------------------------------------------- /resources/assets/js/components/Example.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | -------------------------------------------------------------------------------- /resources/assets/js/components/Row.vue: -------------------------------------------------------------------------------- 1 | 38 | 39 | 87 | -------------------------------------------------------------------------------- /resources/assets/sass/app.scss: -------------------------------------------------------------------------------- 1 | 2 | // Fonts 3 | @import url(https://fonts.googleapis.com/css?family=Raleway:300,400,600); 4 | 5 | // Variables 6 | @import "variables"; 7 | 8 | // Bootstrap 9 | @import "node_modules/bootstrap/dist/bootstrap.css"; 10 | -------------------------------------------------------------------------------- /resources/views/index.twig: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Editable Table Grid 7 | 8 | 9 | 10 | 11 |
12 | 13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/App/Controllers/UserController.php: -------------------------------------------------------------------------------- 1 | userService = $service; 26 | } 27 | 28 | /** 29 | * @param $id 30 | * @return JsonResponse 31 | */ 32 | public function getOne($id) : JsonResponse 33 | { 34 | return new JsonResponse($this->userService->getOne($id)); 35 | } 36 | 37 | /** 38 | * Get all users 39 | * 40 | * @return JsonResponse 41 | */ 42 | public function getAll() : JsonResponse 43 | { 44 | return new JsonResponse($this->userService->getAll()); 45 | } 46 | 47 | /** 48 | * Store a new user 49 | * 50 | * @param Request $request 51 | * @return JsonResponse 52 | */ 53 | public function save(Request $request) 54 | { 55 | $user = $this->getDataFromRequest($request); 56 | return new JsonResponse($this->userService->save($user)); 57 | } 58 | 59 | /** 60 | * Update the selected user 61 | * 62 | * @param $id 63 | * @param Request $request 64 | * @return JsonResponse 65 | */ 66 | public function update(int $id, Request $request) : JsonResponse 67 | { 68 | $user = $this->getDataFromRequest($request); 69 | return new JsonResponse($this->userService->update($id, $user)); 70 | } 71 | 72 | /** 73 | * Delete the selected user 74 | * 75 | * @param $id 76 | * @return JsonResponse 77 | */ 78 | public function delete(int $id) 79 | { 80 | return new JsonResponse($this->userService->delete($id)); 81 | } 82 | 83 | /** 84 | * Uniform all data 85 | * 86 | * @param Request $request 87 | * @return array 88 | */ 89 | public function getDataFromRequest(Request $request) : array 90 | { 91 | return $request->request->all(); 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /src/App/RoutesLoader.php: -------------------------------------------------------------------------------- 1 | app = $app; 25 | $this->instantiateControllers(); 26 | 27 | } 28 | 29 | /** 30 | * Instance of controllers 31 | */ 32 | private function instantiateControllers() 33 | { 34 | $this->app['user.controller'] = function() { 35 | return new Controllers\UserController($this->app['user.service']); 36 | }; 37 | } 38 | 39 | /** 40 | * Bind routes with controllers 41 | */ 42 | public function bindRoutesToControllers() 43 | { 44 | $api = $this->app['controllers_factory']; 45 | 46 | $api->get('/users', 'user.controller:getAll'); 47 | $api->get('/users/{id}', 'user.controller:getOne'); 48 | $api->post('/users', 'user.controller:save'); 49 | $api->patch('/users/{id}', 'user.controller:update'); 50 | $api->delete('/users/{id}', 'user.controller:delete'); 51 | 52 | $this->app->mount($this->app['api.endpoint'].'/', $api); 53 | 54 | $this->app->get('/', function () { 55 | return $this->app['twig']->render('index.twig'); 56 | }); 57 | } 58 | } 59 | 60 | -------------------------------------------------------------------------------- /src/App/Services/BaseService.php: -------------------------------------------------------------------------------- 1 | db = $db; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/App/Services/UserService.php: -------------------------------------------------------------------------------- 1 | db->fetchAssoc('SELECT * FROM users WHERE id = ? ', [(int)$id]); 20 | } 21 | 22 | /** 23 | * Get all rows 24 | * 25 | * @return array 26 | */ 27 | public function getAll() : array 28 | { 29 | return $this->db->fetchAll('SELECT * FROM users ORDER BY id'); 30 | } 31 | 32 | /** 33 | * Store a new user 34 | * 35 | * @param $user 36 | * @return array 37 | */ 38 | public function save($user) : array 39 | { 40 | $this->db->insert('users', $user); 41 | return $this->getOne($this->db->lastInsertId()); 42 | } 43 | 44 | /** 45 | * @param int $id 46 | * @param array $user 47 | */ 48 | public function update($id, $user) 49 | { 50 | $this->db->update('users', $user, ['id' => $id]); 51 | return $this->getOne($id); 52 | } 53 | 54 | /** 55 | * Delete the selected user 56 | * 57 | * @param $id 58 | * @return int 59 | * @throws \Doctrine\DBAL\Exception\InvalidArgumentException 60 | */ 61 | public function delete(int $id) 62 | { 63 | return $this->db->delete('users', ['id' => $id]); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/App/ServicesLoader.php: -------------------------------------------------------------------------------- 1 | app = $app; 25 | } 26 | 27 | /** 28 | * Bind services with container 29 | */ 30 | public function bindServicesIntoContainer() 31 | { 32 | $this->app['user.service'] = function() { 33 | return new Services\UserService($this->app['db']); 34 | }; 35 | } 36 | } 37 | 38 | -------------------------------------------------------------------------------- /src/app.php: -------------------------------------------------------------------------------- 1 | before(function (Request $request) { 19 | if (0 === strpos($request->headers->get('Content-Type'), 'application/json')) { 20 | $data = json_decode($request->getContent(), true); 21 | $request->request->replace(is_array($data) ? $data : array()); 22 | } 23 | }); 24 | 25 | $app->register(new Silex\Provider\TwigServiceProvider(), array( 26 | 'twig.path' => __DIR__.'/../resources/views', 27 | )); 28 | 29 | $app->register(new ServiceControllerServiceProvider()); 30 | 31 | $app->register(new DoctrineServiceProvider(), array( 32 | 'db.options' => $app['db.options'] 33 | )); 34 | 35 | $app->register(new HttpCacheServiceProvider(), array("http_cache.cache_dir" => ROOT_PATH . '/storage/cache',)); 36 | 37 | $app->register(new MonologServiceProvider(), array( 38 | 'monolog.logfile' => ROOT_PATH . '/storage/logs/' . Carbon::now('Europe/London')->format('Y-m-d') . '.log', 39 | 'monolog.level' => $app['log.level'], 40 | 'monolog.name' => 'application' 41 | )); 42 | 43 | //load services 44 | $servicesLoader = new App\ServicesLoader($app); 45 | $servicesLoader->bindServicesIntoContainer(); 46 | 47 | //load routes 48 | $routesLoader = new App\RoutesLoader($app); 49 | $routesLoader->bindRoutesToControllers(); 50 | 51 | $app->error(function (\Exception $e, $code) use ($app) { 52 | $app['monolog']->addError($e->getMessage()); 53 | $app['monolog']->addError($e->getTraceAsString()); 54 | return new JsonResponse(array('statusCode' => $code, 'message' => $e->getMessage(), 'stacktrace' => $e->getTraceAsString())); 55 | }); 56 | 57 | return $app; 58 | -------------------------------------------------------------------------------- /storage/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore -------------------------------------------------------------------------------- /storage/logs/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore -------------------------------------------------------------------------------- /tests/Services/UserServiceTest.php: -------------------------------------------------------------------------------- 1 | app = new Application(); 31 | $this->app->register(new DoctrineServiceProvider(), array( 32 | 'db.options' => array( 33 | 'driver' => 'pdo_mysql', 34 | 'user' => 'user', 35 | 'password' => 'password', 36 | 'dbname' => 'mydb', 37 | 'host' => 'localhost', 38 | 'port' => 3306, 39 | 'memory' => true 40 | ), 41 | )); 42 | $this->userService = new UserService($this->app['db']); 43 | 44 | $stmt = $this->app['db']->prepare("CREATE table users( 45 | id INT(11) AUTO_INCREMENT PRIMARY KEY, 46 | username VARCHAR(50), 47 | email VARCHAR (50), 48 | first_name VARCHAR (100), 49 | last_name VARCHAR (100), 50 | address VARCHAR (255) 51 | );"); 52 | $stmt->execute(); 53 | 54 | $stmt = $this->app['db']->prepare("INSERT INTO users (username, email, first_name, last_name, address) VALUES ('username', 'email@email.com', 'first_name', 'last_name', 'address')"); 55 | $stmt->execute(); 56 | } 57 | 58 | /** 59 | * Test get one method 60 | */ 61 | public function testGetOne() 62 | { 63 | $data = $this->userService->getOne(1); 64 | $this->assertEquals('username', $data['username']); 65 | $this->assertEquals('email@email.com', $data['email']); 66 | $this->assertEquals('first_name', $data['first_name']); 67 | $this->assertEquals('last_name', $data['last_name']); 68 | $this->assertEquals('address', $data['address']); 69 | } 70 | 71 | /** 72 | * Test get all method 73 | */ 74 | public function testGetAll() 75 | { 76 | $data = $this->userService->getAll(); 77 | $this->assertNotNull($data); 78 | } 79 | 80 | /** 81 | * Test create a new item 82 | */ 83 | function testSave() 84 | { 85 | $user = [ 86 | 'username' => 'username', 87 | 'email' => 'test@email.com', 88 | 'first_name' => 'first_name', 89 | 'last_name' => 'last_name', 90 | 'address' => 'address' 91 | ]; 92 | $this->userService->save($user); 93 | $data = $this->userService->getAll(); 94 | $this->assertEquals(2, count($data)); 95 | } 96 | 97 | /** 98 | * Test update an item 99 | */ 100 | function testUpdate() 101 | { 102 | $user = [ 103 | 'username' => 'username', 104 | 'email' => 'test@email.com', 105 | 'first_name' => 'first_name', 106 | 'last_name' => 'last_name', 107 | 'address' => 'address' 108 | ]; 109 | $this->userService->save($user); 110 | $user = [ 111 | 'username' => 'new_username', 112 | 'email' => 'new_test@email.com', 113 | 'first_name' => 'new_first_name', 114 | 'last_name' => 'new_last_name', 115 | 'address' => 'new_address' 116 | ]; 117 | $this->userService->update(1, $user); 118 | $data = $this->userService->getAll(); 119 | $this->assertEquals('new_username', $data[0]['username']); 120 | $this->assertEquals('new_test@email.com', $data[0]['email']); 121 | $this->assertEquals('new_first_name', $data[0]['first_name']); 122 | $this->assertEquals('new_last_name', $data[0]['last_name']); 123 | $this->assertEquals('new_address', $data[0]['address']); 124 | } 125 | 126 | /** 127 | * Test delete method 128 | */ 129 | function testDelete() 130 | { 131 | $user = [ 132 | 'username' => 'username', 133 | 'email' => 'test@email.com', 134 | 'first_name' => 'first_name', 135 | 'last_name' => 'last_name', 136 | 'address' => 'address' 137 | ]; 138 | $this->userService->save($user); 139 | $this->userService->delete(1); 140 | $data = $this->userService->getAll(); 141 | $this->assertEquals(1, count($data)); 142 | } 143 | 144 | /** 145 | * roll back the table 146 | */ 147 | public function tearDown() 148 | { 149 | $stmt = $this->app['db']->prepare("DROP TABLE users;"); 150 | $stmt->execute(); 151 | } 152 | } 153 | -------------------------------------------------------------------------------- /web/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | 3 | Options -MultiViews 4 | 5 | 6 | RewriteEngine On 7 | 8 | # Redirect Trailing Slashes If Not A Folder... 9 | RewriteCond %{REQUEST_FILENAME} !-d 10 | RewriteRule ^(.*)/$ /$1 [L,R=301] 11 | 12 | # Handle Front Controller... 13 | RewriteCond %{REQUEST_FILENAME} !-d 14 | RewriteCond %{REQUEST_FILENAME} !-f 15 | RewriteRule ^ index.php [L] 16 | 17 | # Handle Authorization Header 18 | RewriteCond %{HTTP:Authorization} . 19 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 20 | 21 | -------------------------------------------------------------------------------- /web/index.php: -------------------------------------------------------------------------------- 1 | run(); 14 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var webpack = require('webpack') 3 | 4 | module.exports = { 5 | entry: './resources/assets/js/app.js', 6 | output: { 7 | path: path.resolve(__dirname, './web/js'), 8 | publicPath: '/web/js/', 9 | filename: 'app.js' 10 | }, 11 | module: { 12 | rules: [ 13 | { 14 | test: /\.vue$/, 15 | loader: 'vue-loader', 16 | options: { 17 | loaders: { 18 | // Since sass-loader (weirdly) has SCSS as its default parse mode, we map 19 | // the "scss" and "sass" values for the lang attribute to the right configs here. 20 | // other preprocessors should work out of the box, no loader config like this necessary. 21 | 'scss': 'vue-style-loader!css-loader!sass-loader', 22 | 'sass': 'vue-style-loader!css-loader!sass-loader?indentedSyntax' 23 | } 24 | // other vue-loader options go here 25 | } 26 | }, 27 | { 28 | test: /\.js$/, 29 | loader: 'babel-loader', 30 | exclude: /node_modules/ 31 | }, 32 | { 33 | test: /\.(png|jpg|gif|svg)$/, 34 | loader: 'file-loader', 35 | options: { 36 | name: '[name].[ext]?[hash]' 37 | } 38 | } 39 | ] 40 | }, 41 | resolve: { 42 | alias: { 43 | 'vue$': 'vue/dist/vue.esm.js' 44 | } 45 | }, 46 | devServer: { 47 | historyApiFallback: true, 48 | noInfo: true 49 | }, 50 | performance: { 51 | hints: false 52 | }, 53 | devtool: '#eval-source-map' 54 | } 55 | 56 | if (process.env.NODE_ENV === 'production') { 57 | module.exports.devtool = '#source-map' 58 | // http://vue-loader.vuejs.org/en/workflow/production.html 59 | module.exports.plugins = (module.exports.plugins || []).concat([ 60 | new webpack.DefinePlugin({ 61 | 'process.env': { 62 | NODE_ENV: '"production"' 63 | } 64 | }), 65 | new webpack.optimize.UglifyJsPlugin({ 66 | sourceMap: true, 67 | compress: { 68 | warnings: false 69 | } 70 | }), 71 | new webpack.LoaderOptionsPlugin({ 72 | minimize: true 73 | }) 74 | ]) 75 | } 76 | --------------------------------------------------------------------------------