diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..f22f096 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,6 @@ +/test export-ignore +.gitattributes export-ignore +.gitignore export-ignore +.travis.yml export-ignore +phpcs.xml export-ignore +phpunit.xml.dist export-ignore diff --git a/.gitignore b/.gitignore index d8a7996..27e7103 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ -composer.lock vendor/ +.idea/ +phpunit.xml diff --git a/.travis.yml b/.travis.yml index e5160dd..63f6a85 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,20 +5,44 @@ language: php cache: directories: - $HOME/.composer/cache + - vendor + +env: + global: + - COMPOSER_ARGS="--no-interaction --ignore-platform-reqs" matrix: fast_finish: true include: - - php: 5.5 + - php: 5.6 + env: + - DEPS=lowest + - php: 5.6 env: - - EXECUTE_CS_CHECK=true + - DEPS=locked - php: 5.6 env: - - EXECUTE_COVERAGE=true + - DEPS=latest + - php: 7 + env: + - DEPS=lowest + - php: 7 + env: + - DEPS=locked + - CS_CHECK=true - php: 7 + env: + - DEPS=latest + - php: hhvm + env: + - DEPS=lowest - php: hhvm + env: + - DEPS=locked + - php: hhvm + env: + - DEPS=latest allow_failures: - - php: 7 - php: hhvm notifications: @@ -26,12 +50,15 @@ notifications: email: false before_install: - - if [[ $EXECUTE_COVERAGE != 'true' ]]; then phpenv config-rm xdebug.ini || return 0 ; fi - - composer self-update + - if [[ $TEST_COVERAGE != 'true' ]]; then phpenv config-rm xdebug.ini || return 0 ; fi + - travis_retry composer self-update install: - - travis_retry composer install --no-interaction --ignore-platform-reqs --prefer-source + - if [[ $DEPS == 'latest' ]]; then travis_retry composer update $COMPOSER_ARGS ; fi + - if [[ $DEPS == 'lowest' ]]; then travis_retry composer update --prefer-lowest --prefer-stable $COMPOSER_ARGS ; fi + - travis_retry composer install $COMPOSER_ARGS + - composer show script: - - ./vendor/bin/phpunit - - if [[ $EXECUTE_CS_CHECK == 'true' ]]; then ./vendor/bin/phpcs ; fi + - composer test + - if [[ $CS_CHECK == 'true' ]]; then composer cs-check ; fi diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..edcd948 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,31 @@ +# Changelog + +All notable changes to this project will be documented in this file, in reverse chronological order by release. + +## 1.2.0 - TBD + +### Added + +- [#24](https://github.com/zfcampus/zf-apigility-documentation-swagger/pull/24) + adds support for v3 releases of Zend Framework components, keeping + compatibility for v2 releases. +- [#14](https://github.com/zfcampus/zf-apigility-documentation-swagger/pull/14) and + [#19](https://github.com/zfcampus/zf-apigility-documentation-swagger/pull/19) add + support for retrieving the field type as both the type and dataType. + +### Deprecated + +- Nothing. + +### Removed + +- [#24](https://github.com/zfcampus/zf-apigility-documentation-swagger/pull/24) + removes support for PHP 5.5. +- [#21](https://github.com/zfcampus/zf-apigility-documentation-swagger/pull/21) + removes the verbiage "Operation for {Api}" as a default service description + from the swagger templates. + +### Fixed + +- [#23](https://github.com/zfcampus/zf-apigility-documentation-swagger/pull/23) + updates the link to the Swagger website to point to the new swagger.io URL. diff --git a/CONDUCT.md b/CONDUCT.md new file mode 100644 index 0000000..c663d2b --- /dev/null +++ b/CONDUCT.md @@ -0,0 +1,43 @@ +# Contributor Code of Conduct + +The Zend Framework project adheres to [The Code Manifesto](http://codemanifesto.com) +as its guidelines for contributor interactions. + +## The Code Manifesto + +We want to work in an ecosystem that empowers developers to reach their +potential — one that encourages growth and effective collaboration. A space that +is safe for all. + +A space such as this benefits everyone that participates in it. It encourages +new developers to enter our field. It is through discussion and collaboration +that we grow, and through growth that we improve. + +In the effort to create such a place, we hold to these values: + +1. **Discrimination limits us.** This includes discrimination on the basis of + race, gender, sexual orientation, gender identity, age, nationality, technology + and any other arbitrary exclusion of a group of people. +2. **Boundaries honor us.** Your comfort levels are not everyone’s comfort + levels. Remember that, and if brought to your attention, heed it. +3. **We are our biggest assets.** None of us were born masters of our trade. + Each of us has been helped along the way. Return that favor, when and where + you can. +4. **We are resources for the future.** As an extension of #3, share what you + know. Make yourself a resource to help those that come after you. +5. **Respect defines us.** Treat others as you wish to be treated. Make your + discussions, criticisms and debates from a position of respectfulness. Ask + yourself, is it true? Is it necessary? Is it constructive? Anything less is + unacceptable. +6. **Reactions require grace.** Angry responses are valid, but abusive language + and vindictive actions are toxic. When something happens that offends you, + handle it assertively, but be respectful. Escalate reasonably, and try to + allow the offender an opportunity to explain themselves, and possibly correct + the issue. +7. **Opinions are just that: opinions.** Each and every one of us, due to our + background and upbringing, have varying opinions. The fact of the matter, is + that is perfectly acceptable. Remember this: if you respect your own + opinions, you should respect the opinions of others. +8. **To err is human.** You might not intend it, but mistakes do happen and + contribute to build experience. Tolerate honest mistakes, and don't hesitate + to apologize if you make one yourself. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d7d8743..62fdd14 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -50,25 +50,31 @@ First, use [Composer](https://getcomposer.org) to install all dependencies: $ composer install ``` -To run tests, use the PHPUnit executable installed by Composer: +To run tests: ```console -$ ./vendor/bin/phpunit +$ composer test ``` ## CODING STANDARDS While Apigility uses Zend Framework 2 coding standards, in practice, we check -standards using [php-cs-fixer](https://github.com/fabpot/PHP-CS-Fixer) (which is -installed via Composer with other dependencies). To check for CS issues: +standards against PSR-1/2. To check for CS issues: ```console -$ ./vendor/bin/php-cs-fixer fix . --dry-run +$ composer cs-check ``` -This will report CS issues. Alternately, you can have the tool fix them for you -by omitting the `--dry-run` switch: +This will report CS issues. You can also attempt to fix many reported errors +automatically: ```console -$ ./vendor/bin/php-cs-fixer fix . +$ composer cs-fix ``` + +If you use `cs-fix` to fix issues, make certain you add and commit any files +changed! + +## Conduct + +Please see our [CONDUCT.md](CONDUCT.md) to understand expected behavior when interacting with others in the project. diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..94fe586 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,28 @@ +Copyright (c) 2014-2016, Zend Technologies USA, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +- Neither the name of Zend Technologies USA, Inc. nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Module.php b/Module.php deleted file mode 100644 index b1800c0..0000000 --- a/Module.php +++ /dev/null @@ -1,47 +0,0 @@ - array( - 'namespaces' => array( - __NAMESPACE__ => __DIR__ . '/src/' - ) - ) - ); - } - - public function onBootstrap($e) - { - $app = $e->getApplication(); - $events = $app->getEventManager(); - $events->attach('render', array($this, 'onRender'), 100); - } - - public function onRender($e) - { - $model = $e->getResult(); - if (! $model instanceof ViewModel) { - return; - } - - $app = $e->getApplication(); - $services = $app->getServiceManager(); - $view = $services->get('View'); - $events = $view->getEventManager(); - $events->attach($services->get(__NAMESPACE__ . '\SwaggerViewStrategy')); - } -} diff --git a/README.md b/README.md index df43d32..7f08a3b 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Introduction ------------ This module provides Apigility the ability to show API documentation through a -[Swagger UI](http://swagger.wordnik.com/). +[Swagger UI](http://swagger.io/). The Swagger UI is immediately accessible after enabling this module at the URI path `/apigility/swagger`. @@ -28,14 +28,14 @@ Installation Run the following `composer` command: ```console -$ composer require "zfcampus/zf-apigility-documentation-swagger:~1.0-dev" +$ composer require zfcampus/zf-apigility-documentation-swagger ``` Alternately, manually add the following to your `composer.json`, in the `require` section: ```javascript "require": { - "zfcampus/zf-apigility-documentation-swagger": "~1.0-dev" + "zfcampus/zf-apigility-documentation-swagger": "^1.2" } ``` @@ -45,16 +45,21 @@ Finally, add the module name to your project's `config/application.config.php` u key: ```php -return array( +return [ /* ... */ - 'modules' => array( + 'modules' => [ /* ... */ 'ZF\Apigility\Documentation\Swagger', - ), + ], /* ... */ -); +]; ``` +> ### zf-component-installer +> +> If you use [zf-component-installer](https://github.com/zendframework/zf-component-installer), +> that plugin will install zf-apigility-documentation-swagger as a module for you. + Routes ------ @@ -76,73 +81,82 @@ The following is required to ensure the module works within a ZF2 and/or Apigili application: ```php -'router' => array( - 'routes' => array( - 'zf-apigility' => array( - 'child_routes' => array( - 'swagger' => array( - 'type' => 'Zend\Mvc\Router\Http\Segment', - 'options' => array( - 'route' => '/swagger', - 'defaults' => array( - 'controller' => 'ZF\Apigility\Documentation\Swagger\SwaggerUi', - 'action' => 'list', - ), - ), - 'may_terminate' => true, - 'child_routes' => array( - 'api' => array( - 'type' => 'Segment', - 'options' => array( - 'route' => '/:api', - 'defaults' => array( - 'action' => 'show', - ), - ), - 'may_terminate' => true, - ), - ), - ), - ), - ), - ), -), -'service_manager' => array( - 'factories' => array( - 'ZF\Apigility\Documentation\Swagger\SwaggerViewStrategy' => 'ZF\Apigility\Documentation\Swagger\SwaggerViewStrategyFactory', - ), -), -'controllers' => array( - 'factories' => array( - 'ZF\Apigility\Documentation\Swagger\SwaggerUi' => 'ZF\Apigility\Documentation\Swagger\SwaggerUiControllerFactory', - ), -), -'view_manager' => array( - 'template_path_stack' => array( - 'zf-apigility-documentation-swagger' => __DIR__ . '/../view', - ), -), -'asset_manager' => array( - 'resolver_configs' => array( - 'paths' => array( - __DIR__ . '/../asset', - ), - ), -), -'zf-content-negotiation' => array( - 'accept_whitelist' => array( - 'ZF\Apigility\Documentation\Controller' => array( - 0 => 'application/vnd.swagger+json', - ), - ), - 'selectors' => array( - 'Documentation' => array( - 'ZF\Apigility\Documentation\Swagger\ViewModel' => array( - 'application/vnd.swagger+json', - ), - ) - ) -), +namespace ZF\Apigility\Documentation\Swagger; + +return [ + 'router' => [ + 'routes' => [ + 'zf-apigility' => [ + 'child_routes' => [ + 'swagger' => [ + 'type' => 'segment', + 'options' => [ + 'route' => '/swagger', + 'defaults' => [ + 'controller' => SwaggerUi::class, + 'action' => 'list', + ], + ], + 'may_terminate' => true, + 'child_routes' => [ + 'api' => [ + 'type' => 'segment', + 'options' => [ + 'route' => '/:api', + 'defaults' => [ + 'action' => 'show', + ], + ], + 'may_terminate' => true, + ], + ], + ], + ], + ], + ], + ], + + 'service_manager' => [ + 'factories' => [ + SwaggerViewStrategy::class => SwaggerViewStrategyFactory::class, + ], + ], + + 'controllers' => [ + 'factories' => [ + SwaggerUi::class => SwaggerUiControllerFactory::class, + ], + ], + + 'view_manager' => [ + 'template_path_stack' => [ + 'zf-apigility-documentation-swagger' => __DIR__ . '/../view', + ], + ], + + 'asset_manager' => [ + 'resolver_configs' => [ + 'paths' => [ + __DIR__ . '/../asset', + ], + ], + ], + + 'zf-content-negotiation' => [ + 'accept_whitelist' => [ + 'ZF\Apigility\Documentation\Controller' => [ + 0 => 'application/vnd.swagger+json', + ], + ], + 'selectors' => [ + 'Documentation' => [ + ViewModel::class => [ + 'application/vnd.swagger+json', + ], + ], + ], + ], +]; ``` ZF2 Events diff --git a/asset/zf-apigility-documentation-swagger/lib/swagger.js b/asset/zf-apigility-documentation-swagger/lib/swagger.js index e181a92..584ed38 100644 --- a/asset/zf-apigility-documentation-swagger/lib/swagger.js +++ b/asset/zf-apigility-documentation-swagger/lib/swagger.js @@ -503,7 +503,7 @@ SwaggerModel.prototype.createJSONSample = function(modelsToIgnore) { var SwaggerModelProperty = function(name, obj) { this.name = name; - this.dataType = obj.type || obj.dataType || obj["$ref"]; + this.dataType = obj.dataType || obj.type || obj["$ref"]; this.isCollection = this.dataType && (this.dataType.toLowerCase() === 'array' || this.dataType.toLowerCase() === 'list' || this.dataType.toLowerCase() === 'set'); this.descr = obj.description; this.required = obj.required; diff --git a/composer.json b/composer.json index bbf06b3..7895e4a 100644 --- a/composer.json +++ b/composer.json @@ -22,36 +22,44 @@ "branch-alias": { "dev-master": "1.1-dev", "dev-develop": "1.2-dev" + }, + "zf": { + "module": "ZF\\Apigility\\Documentation\\Swagger" } }, "require": { - "php": ">=5.5", - "zendframework/zend-eventmanager": "~2.3", - "zendframework/zend-mvc": "~2.3", - "zendframework/zend-servicemanager": "~2.3", - "zendframework/zend-view": "~2.3", - "zfcampus/zf-api-problem": "~1.0", - "zfcampus/zf-apigility-documentation": "~1.0", - "zfcampus/zf-content-negotiation": "~1.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-eventmanager": "^2.6.3 || ^3.0.1", + "zendframework/zend-mvc": "^2.7.9 || ^3.0.2", + "zendframework/zend-servicemanager": "^2.7.6 || ^3.1", + "zendframework/zend-view": "^2.8.1", + "zfcampus/zf-api-problem": "^1.2.1", + "zfcampus/zf-apigility-documentation": "^1.2", + "zfcampus/zf-content-negotiation": "^1.2.1" }, "require-dev": { - "phpunit/phpunit": "~4.7", + "phpunit/phpunit": "^4.7", "squizlabs/php_codesniffer": "^2.3.1", - "zendframework/zend-http": "~2.3", - "zendframework/zend-loader": "~2.3", - "zendframework/zend-stdlib": "~2.3" + "zendframework/zend-http": "^2.5.4", + "zendframework/zend-stdlib": "^2.7.7 || ^3.0.1" }, "autoload": { "psr-4": { "ZF\\Apigility\\Documentation\\Swagger\\": "src/" - }, - "classmap": [ - "Module.php" - ] + } }, "autoload-dev": { "psr-4": { "ZFTest\\Apigility\\Documentation\\Swagger\\": "test/" } + }, + "scripts": { + "check": [ + "@cs-check", + "@test" + ], + "cs-check": "phpcs", + "cs-fix": "phpcbf", + "test": "phpunit" } } diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..4a8c2e0 --- /dev/null +++ b/composer.lock @@ -0,0 +1,2466 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "hash": "9ea46b44169a9193e953f8f036bb952f", + "content-hash": "d63cc98bb6b6baefe6a82065736a24f6", + "packages": [ + { + "name": "container-interop/container-interop", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/container-interop/container-interop.git", + "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e", + "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Interop\\Container\\": "src/Interop/Container/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", + "time": "2014-12-30 15:22:37" + }, + { + "name": "michelf/php-markdown", + "version": "1.6.0", + "source": { + "type": "git", + "url": "https://github.com/michelf/php-markdown.git", + "reference": "156e56ee036505ec637d761ee62dc425d807183c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/michelf/php-markdown/zipball/156e56ee036505ec637d761ee62dc425d807183c", + "reference": "156e56ee036505ec637d761ee62dc425d807183c", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-lib": "1.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Michelf": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Michel Fortin", + "email": "michel.fortin@michelf.ca", + "homepage": "https://michelf.ca/", + "role": "Developer" + }, + { + "name": "John Gruber", + "homepage": "https://daringfireball.net/" + } + ], + "description": "PHP Markdown", + "homepage": "https://michelf.ca/projects/php-markdown/", + "keywords": [ + "markdown" + ], + "time": "2015-12-24 01:37:31" + }, + { + "name": "zendframework/zend-config", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-config.git", + "reference": "2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-config/zipball/2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d", + "reference": "2920e877a9f6dca9fa8f6bd3b1ffc2e19bb1e30d", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-filter": "^2.6", + "zendframework/zend-i18n": "^2.5", + "zendframework/zend-json": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-filter": "Zend\\Filter component", + "zendframework/zend-i18n": "Zend\\I18n component", + "zendframework/zend-json": "Zend\\Json to use the Json reader or writer classes", + "zendframework/zend-servicemanager": "Zend\\ServiceManager for use with the Config Factory to retrieve reader and writer instances" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev", + "dev-develop": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Config\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a nested object property based user interface for accessing this configuration data within application code", + "homepage": "https://github.com/zendframework/zend-config", + "keywords": [ + "config", + "zf2" + ], + "time": "2016-02-04 23:01:10" + }, + { + "name": "zendframework/zend-escaper", + "version": "2.5.2", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-escaper.git", + "reference": "2dcd14b61a72d8b8e27d579c6344e12c26141d4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/2dcd14b61a72d8b8e27d579c6344e12c26141d4e", + "reference": "2dcd14b61a72d8b8e27d579c6344e12c26141d4e", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Escaper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-escaper", + "keywords": [ + "escaper", + "zf2" + ], + "time": "2016-06-30 19:48:38" + }, + { + "name": "zendframework/zend-eventmanager", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-eventmanager.git", + "reference": "5c80bdee0e952be112dcec0968bad770082c3a6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/5c80bdee0e952be112dcec0968bad770082c3a6e", + "reference": "5c80bdee0e952be112dcec0968bad770082c3a6e", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0" + }, + "require-dev": { + "athletic/athletic": "^0.1", + "container-interop/container-interop": "^1.1.0", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "^2.0", + "zendframework/zend-stdlib": "^2.7.3 || ^3.0" + }, + "suggest": { + "container-interop/container-interop": "^1.1.0, to use the lazy listeners feature", + "zendframework/zend-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev", + "dev-develop": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\EventManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Trigger and listen to events within a PHP application", + "homepage": "https://github.com/zendframework/zend-eventmanager", + "keywords": [ + "event", + "eventmanager", + "events", + "zf2" + ], + "time": "2016-02-18 20:53:00" + }, + { + "name": "zendframework/zend-filter", + "version": "2.7.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-filter.git", + "reference": "84c50246428efb0a1e52868e162dab3e149d5b80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-filter/zipball/84c50246428efb0a1e52868e162dab3e149d5b80", + "reference": "84c50246428efb0a1e52868e162dab3e149d5b80", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "pear/archive_tar": "^1.4", + "phpunit/phpunit": "~4.0", + "zendframework/zend-crypt": "^2.6", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-uri": "^2.5" + }, + "suggest": { + "zendframework/zend-crypt": "Zend\\Crypt component, for encryption filters", + "zendframework/zend-i18n": "Zend\\I18n component for filters depending on i18n functionality", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for using the filter chain functionality", + "zendframework/zend-uri": "Zend\\Uri component, for the UriNormalize filter" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" + }, + "zf": { + "component": "Zend\\Filter", + "config-provider": "Zend\\Filter\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Filter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a set of commonly needed data filters", + "homepage": "https://github.com/zendframework/zend-filter", + "keywords": [ + "filter", + "zf2" + ], + "time": "2016-04-18 18:32:43" + }, + { + "name": "zendframework/zend-http", + "version": "2.5.4", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-http.git", + "reference": "7b920b4ec34b5ee58f76eb4e8c408b083121953c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-http/zipball/7b920b4ec34b5ee58f76eb4e8c408b083121953c", + "reference": "7b920b4ec34b5ee58f76eb4e8c408b083121953c", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-loader": "^2.5", + "zendframework/zend-stdlib": "^2.5 || ^3.0", + "zendframework/zend-uri": "^2.5", + "zendframework/zend-validator": "^2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "^4.0", + "zendframework/zend-config": "^2.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Http\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides an easy interface for performing Hyper-Text Transfer Protocol (HTTP) requests", + "homepage": "https://github.com/zendframework/zend-http", + "keywords": [ + "http", + "zf2" + ], + "time": "2016-02-04 20:36:48" + }, + { + "name": "zendframework/zend-inputfilter", + "version": "2.7.2", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-inputfilter.git", + "reference": "5630ef49e8c16a6fe0c2bd0d2a519869b14d5b12" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-inputfilter/zipball/5630ef49e8c16a6fe0c2bd0d2a519869b14d5b12", + "reference": "5630ef49e8c16a6fe0c2bd0d2a519869b14d5b12", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-filter": "^2.6", + "zendframework/zend-stdlib": "^2.7 || ^3.0", + "zendframework/zend-validator": "^2.6" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "^4.5", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-servicemanager": "To support plugin manager support" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" + }, + "zf": { + "component": "Zend\\InputFilter", + "config-provider": "Zend\\InputFilter\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\InputFilter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-inputfilter", + "keywords": [ + "inputfilter", + "zf2" + ], + "time": "2016-06-11 19:35:33" + }, + { + "name": "zendframework/zend-json", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-json.git", + "reference": "f42a1588e75c2a3e338cd94c37906231e616daab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-json/zipball/f42a1588e75c2a3e338cd94c37906231e616daab", + "reference": "f42a1588e75c2a3e338cd94c37906231e616daab", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "^2.3", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "suggest": { + "zendframework/zend-json-server": "For implementing JSON-RPC servers", + "zendframework/zend-xml2json": "For converting XML documents to JSON" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev", + "dev-develop": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Json\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP", + "homepage": "https://github.com/zendframework/zend-json", + "keywords": [ + "json", + "zf2" + ], + "time": "2016-04-01 02:34:00" + }, + { + "name": "zendframework/zend-loader", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-loader.git", + "reference": "c5fd2f071bde071f4363def7dea8dec7393e135c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-loader/zipball/c5fd2f071bde071f4363def7dea8dec7393e135c", + "reference": "c5fd2f071bde071f4363def7dea8dec7393e135c", + "shasum": "" + }, + "require": { + "php": ">=5.3.23" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Loader\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-loader", + "keywords": [ + "loader", + "zf2" + ], + "time": "2015-06-03 14:05:47" + }, + { + "name": "zendframework/zend-modulemanager", + "version": "2.7.2", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-modulemanager.git", + "reference": "2a59ab9a0dd7699a55050dff659ab0f28272b46e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-modulemanager/zipball/2a59ab9a0dd7699a55050dff659ab0f28272b46e", + "reference": "2a59ab9a0dd7699a55050dff659ab0f28272b46e", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-config": "^2.6", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-console": "^2.6", + "zendframework/zend-di": "^2.6", + "zendframework/zend-loader": "^2.5", + "zendframework/zend-mvc": "^2.7", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" + }, + "suggest": { + "zendframework/zend-config": "Zend\\Config component", + "zendframework/zend-console": "Zend\\Console component", + "zendframework/zend-loader": "Zend\\Loader component", + "zendframework/zend-mvc": "Zend\\Mvc component", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\ModuleManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-modulemanager", + "keywords": [ + "modulemanager", + "zf2" + ], + "time": "2016-05-16 21:21:11" + }, + { + "name": "zendframework/zend-mvc", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-mvc.git", + "reference": "3c6c9e570e01a8b8fcb0605d2f8eb25812c0c273" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-mvc/zipball/3c6c9e570e01a8b8fcb0605d2f8eb25812c0c273", + "reference": "3c6c9e570e01a8b8fcb0605d2f8eb25812c0c273", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.1", + "php": "^5.6 || ^7.0", + "zendframework/zend-eventmanager": "^3.0", + "zendframework/zend-http": "^2.5.4", + "zendframework/zend-modulemanager": "^2.7.1", + "zendframework/zend-router": "^3.0.1", + "zendframework/zend-servicemanager": "^3.0.3", + "zendframework/zend-stdlib": "^3.0", + "zendframework/zend-view": "^2.6.7" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "^4.5", + "zendframework/zend-json": "^2.6.1 || ^3.0", + "zendframework/zend-psr7bridge": "^0.2" + }, + "suggest": { + "zendframework/zend-json": "(^2.6.1 || ^3.0) To auto-deserialize JSON body content in AbstractRestfulController extensions, when json_decode is unavailable", + "zendframework/zend-mvc-console": "zend-mvc-console provides the ability to expose zend-mvc as a console application", + "zendframework/zend-mvc-i18n": "zend-mvc-i18n provides integration with zend-i18n, including a translation bridge and translatable route segments", + "zendframework/zend-mvc-plugin-fileprg": "To provide Post/Redirect/Get functionality around forms that container file uploads", + "zendframework/zend-mvc-plugin-flashmessenger": "To provide flash messaging capabilities between requests", + "zendframework/zend-mvc-plugin-identity": "To access the authenticated identity (per zend-authentication) in controllers", + "zendframework/zend-mvc-plugin-prg": "To provide Post/Redirect/Get functionality within controllers", + "zendframework/zend-psr7bridge": "(^0.2) To consume PSR-7 middleware within the MVC workflow", + "zendframework/zend-servicemanager-di": "zend-servicemanager-di provides utilities for integrating zend-di and zend-servicemanager in your zend-mvc application" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev", + "dev-develop": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Mvc\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-mvc", + "keywords": [ + "mvc", + "zf2" + ], + "time": "2016-06-30 20:30:28" + }, + { + "name": "zendframework/zend-router", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-router.git", + "reference": "03763610632a9022aff22a0e8f340852e68392a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-router/zipball/03763610632a9022aff22a0e8f340852e68392a1", + "reference": "03763610632a9022aff22a0e8f340852e68392a1", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.1", + "php": "^5.5 || ^7.0", + "zendframework/zend-http": "^2.5", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-stdlib": "^2.7.5 || ^3.0" + }, + "conflict": { + "zendframework/zend-mvc": "<3.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5", + "sebastian/version": "^1.0.4", + "squizlabs/php_codesniffer": "^2.3", + "zendframework/zend-i18n": "^2.6" + }, + "suggest": { + "zendframework/zend-i18n": "^2.6, if defining translatable HTTP path segments" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev", + "dev-develop": "3.1-dev" + }, + "zf": { + "component": "Zend\\Router", + "config-provider": "Zend\\Router\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Router\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-router", + "keywords": [ + "mvc", + "routing", + "zf2" + ], + "time": "2016-05-31 20:47:48" + }, + { + "name": "zendframework/zend-servicemanager", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-servicemanager.git", + "reference": "90b88339a4b937c6bb0055ee04b2567e7e628f25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/90b88339a4b937c6bb0055ee04b2567e7e628f25", + "reference": "90b88339a4b937c6bb0055ee04b2567e7e628f25", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "~1.0", + "php": "^5.5 || ^7.0" + }, + "provide": { + "container-interop/container-interop-implementation": "^1.1" + }, + "require-dev": { + "ocramius/proxy-manager": "^1.0 || ^2.0", + "phpbench/phpbench": "^0.10.0", + "phpunit/phpunit": "^4.6 || ^5.2.10", + "squizlabs/php_codesniffer": "^2.5.1" + }, + "suggest": { + "ocramius/proxy-manager": "ProxyManager 1.* to handle lazy initialization of services", + "zendframework/zend-stdlib": "zend-stdlib ^2.5 if you wish to use the MergeReplaceKey or MergeRemoveKey features in Config instances" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev", + "dev-develop": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\ServiceManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-servicemanager", + "keywords": [ + "service-manager", + "servicemanager", + "zf" + ], + "time": "2016-06-01 16:50:58" + }, + { + "name": "zendframework/zend-stdlib", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-stdlib.git", + "reference": "8bafa58574204bdff03c275d1d618aaa601588ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/8bafa58574204bdff03c275d1d618aaa601588ae", + "reference": "8bafa58574204bdff03c275d1d618aaa601588ae", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0" + }, + "require-dev": { + "athletic/athletic": "~0.1", + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev", + "dev-develop": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Stdlib\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-stdlib", + "keywords": [ + "stdlib", + "zf2" + ], + "time": "2016-04-12 21:19:36" + }, + { + "name": "zendframework/zend-uri", + "version": "2.5.2", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-uri.git", + "reference": "0bf717a239432b1a1675ae314f7c4acd742749ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-uri/zipball/0bf717a239432b1a1675ae314f7c4acd742749ed", + "reference": "0bf717a239432b1a1675ae314f7c4acd742749ed", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-escaper": "^2.5", + "zendframework/zend-validator": "^2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Uri\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "a component that aids in manipulating and validating » Uniform Resource Identifiers (URIs)", + "homepage": "https://github.com/zendframework/zend-uri", + "keywords": [ + "uri", + "zf2" + ], + "time": "2016-02-17 22:38:51" + }, + { + "name": "zendframework/zend-validator", + "version": "2.8.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-validator.git", + "reference": "8ec9f57a717dd37340308aa632f148a2c2be1cfc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/8ec9f57a717dd37340308aa632f148a2c2be1cfc", + "reference": "8ec9f57a717dd37340308aa632f148a2c2be1cfc", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.1", + "php": "^5.5 || ^7.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "^4.0", + "zendframework/zend-cache": "^2.6.1", + "zendframework/zend-config": "^2.6", + "zendframework/zend-db": "^2.7", + "zendframework/zend-filter": "^2.6", + "zendframework/zend-http": "^2.5.4", + "zendframework/zend-i18n": "^2.6", + "zendframework/zend-math": "^2.6", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-session": "^2.6.2", + "zendframework/zend-uri": "^2.5" + }, + "suggest": { + "zendframework/zend-db": "Zend\\Db component", + "zendframework/zend-filter": "Zend\\Filter component, required by the Digits validator", + "zendframework/zend-i18n": "Zend\\I18n component to allow translation of validation error messages as well as to use the various Date validators", + "zendframework/zend-i18n-resources": "Translations of validator messages", + "zendframework/zend-math": "Zend\\Math component", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component to allow using the ValidatorPluginManager and validator chains", + "zendframework/zend-session": "Zend\\Session component", + "zendframework/zend-uri": "Zend\\Uri component, required by the Uri and Sitemap\\Loc validators" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev", + "dev-develop": "2.9-dev" + }, + "zf": { + "component": "Zend\\Validator", + "config-provider": "Zend\\Validator\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Zend\\Validator\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a set of commonly needed validators", + "homepage": "https://github.com/zendframework/zend-validator", + "keywords": [ + "validator", + "zf2" + ], + "time": "2016-06-23 13:44:31" + }, + { + "name": "zendframework/zend-view", + "version": "2.8.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-view.git", + "reference": "71b4ebd0c4c9a2d0e0438f9d3a435e08dd769ff8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-view/zipball/71b4ebd0c4c9a2d0e0438f9d3a435e08dd769ff8", + "reference": "71b4ebd0c4c9a2d0e0438f9d3a435e08dd769ff8", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-loader": "^2.5", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "^4.5", + "zendframework/zend-authentication": "^2.5", + "zendframework/zend-cache": "^2.6.1", + "zendframework/zend-config": "^2.6", + "zendframework/zend-console": "^2.6", + "zendframework/zend-escaper": "^2.5", + "zendframework/zend-feed": "^2.7", + "zendframework/zend-filter": "^2.6.1", + "zendframework/zend-http": "^2.5.4", + "zendframework/zend-i18n": "^2.6", + "zendframework/zend-json": "^2.6.1", + "zendframework/zend-log": "^2.7", + "zendframework/zend-modulemanager": "^2.7.1", + "zendframework/zend-mvc": "^2.7 || ^3.0", + "zendframework/zend-navigation": "^2.5", + "zendframework/zend-paginator": "^2.5", + "zendframework/zend-permissions-acl": "^2.6", + "zendframework/zend-router": "^3.0.1", + "zendframework/zend-serializer": "^2.6.1", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-session": "^2.6.2", + "zendframework/zend-uri": "^2.5" + }, + "suggest": { + "zendframework/zend-authentication": "Zend\\Authentication component", + "zendframework/zend-escaper": "Zend\\Escaper component", + "zendframework/zend-feed": "Zend\\Feed component", + "zendframework/zend-filter": "Zend\\Filter component", + "zendframework/zend-http": "Zend\\Http component", + "zendframework/zend-i18n": "Zend\\I18n component", + "zendframework/zend-json": "Zend\\Json component", + "zendframework/zend-mvc": "Zend\\Mvc component", + "zendframework/zend-navigation": "Zend\\Navigation component", + "zendframework/zend-paginator": "Zend\\Paginator component", + "zendframework/zend-permissions-acl": "Zend\\Permissions\\Acl component", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component", + "zendframework/zend-uri": "Zend\\Uri component" + }, + "bin": [ + "bin/templatemap_generator.php" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev", + "dev-develop": "2.9-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\View\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a system of helpers, output filters, and variable escaping", + "homepage": "https://github.com/zendframework/zend-view", + "keywords": [ + "view", + "zf2" + ], + "time": "2016-06-30 22:28:07" + }, + { + "name": "zfcampus/zf-api-problem", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/zfcampus/zf-api-problem.git", + "reference": "3d2cb9f91aace74d4ca00d865d1ed95b593c6187" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zfcampus/zf-api-problem/zipball/3d2cb9f91aace74d4ca00d865d1ed95b593c6187", + "reference": "3d2cb9f91aace74d4ca00d865d1ed95b593c6187", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^5.6 || ^7.0", + "zendframework/zend-eventmanager": "^2.6.3 || ^3.0.1", + "zendframework/zend-http": "^2.5.4", + "zendframework/zend-json": "^2.6.1 || ^3.0", + "zendframework/zend-mvc": "^2.7.9 || ^3.0.2", + "zendframework/zend-view": "^2.8.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8", + "squizlabs/php_codesniffer": "^2.3.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev", + "dev-develop": "1.3-dev" + }, + "zf": { + "module": "ZF\\ApiProblem" + } + }, + "autoload": { + "psr-4": { + "ZF\\ApiProblem\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "ZF2 Module providing API-Problem assets and rendering", + "homepage": "http://apigility.org/", + "keywords": [ + "api-problem", + "module", + "rest", + "zend", + "zf2" + ], + "time": "2016-07-07 13:52:00" + }, + { + "name": "zfcampus/zf-apigility-documentation", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/zfcampus/zf-apigility-documentation.git", + "reference": "fd5ed08a77355ff7b44e8788568709e3eab0099c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zfcampus/zf-apigility-documentation/zipball/fd5ed08a77355ff7b44e8788568709e3eab0099c", + "reference": "fd5ed08a77355ff7b44e8788568709e3eab0099c", + "shasum": "" + }, + "require": { + "michelf/php-markdown": "^1.5", + "php": "^5.6 || ^7.0", + "zendframework/zend-inputfilter": "^2.7.2", + "zendframework/zend-modulemanager": "^2.7.2", + "zendframework/zend-mvc": "^2.7.9 || ^3.0.2", + "zendframework/zend-servicemanager": "^2.7.6 || ^3.1", + "zendframework/zend-view": "^2.8.1", + "zfcampus/zf-apigility-provider": "^1.2", + "zfcampus/zf-configuration": "^1.2", + "zfcampus/zf-content-negotiation": "^1.2.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0", + "squizlabs/php_codesniffer": "^2.3.1", + "zendframework/zend-stdlib": "^2.7.7 || ^3.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev", + "dev-develop": "1.3-dev" + }, + "zf": { + "module": "ZF\\Apigility\\Documentation" + } + }, + "autoload": { + "psr-4": { + "ZF\\Apigility\\Documentation\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Apigility API documentation module", + "homepage": "http://apigility.org/", + "keywords": [ + "apigiltiy", + "documentation", + "module", + "zend", + "zf2" + ], + "time": "2016-07-14 15:34:14" + }, + { + "name": "zfcampus/zf-apigility-provider", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/zfcampus/zf-apigility-provider.git", + "reference": "cb138d5f0a08fabac74b1f1410561464a890357f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zfcampus/zf-apigility-provider/zipball/cb138d5f0a08fabac74b1f1410561464a890357f", + "reference": "cb138d5f0a08fabac74b1f1410561464a890357f", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0" + }, + "require-dev": { + "squizlabs/php_codesniffer": "^2.3.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev", + "dev-develop": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "ZF\\Apigility\\Provider\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Apigility interfaces", + "homepage": "http://apigility.org/", + "keywords": [ + "api", + "apigility", + "framework", + "zf2" + ], + "time": "2016-07-13 18:03:54" + }, + { + "name": "zfcampus/zf-configuration", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/zfcampus/zf-configuration.git", + "reference": "9bea29e0ac86d7fa7e0cbee13fc75965b0c5aee7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zfcampus/zf-configuration/zipball/9bea29e0ac86d7fa7e0cbee13fc75965b0c5aee7", + "reference": "9bea29e0ac86d7fa7e0cbee13fc75965b0c5aee7", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-config": "^2.6", + "zendframework/zend-modulemanager": "^2.7.1", + "zendframework/zend-stdlib": "^2.7.7 || ^3.0.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0", + "squizlabs/php_codesniffer": "^2.3.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev", + "dev-develop": "1.3-dev" + }, + "zf": { + "module": "ZF\\Configuration" + } + }, + "autoload": { + "psr-4": { + "ZF\\Configuration\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Zend Framework module providing a REST resource for manipulating configuration", + "homepage": "http://apigility.org/", + "keywords": [ + "config", + "module", + "rest", + "zend", + "zf2" + ], + "time": "2016-07-13 20:58:45" + }, + { + "name": "zfcampus/zf-content-negotiation", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/zfcampus/zf-content-negotiation.git", + "reference": "2f7c52af7ef7517509eb7fe9404a54bdc9944829" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zfcampus/zf-content-negotiation/zipball/2f7c52af7ef7517509eb7fe9404a54bdc9944829", + "reference": "2f7c52af7ef7517509eb7fe9404a54bdc9944829", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "zendframework/zend-eventmanager": "^2.6.3 || ^3.0.1", + "zendframework/zend-filter": "^2.7.1", + "zendframework/zend-http": "^2.5.4", + "zendframework/zend-json": "^2.6.1 || ^3.0", + "zendframework/zend-mvc": "^2.7.9 || ^3.0.2", + "zendframework/zend-servicemanager": "^2.7.6 || ^3.1", + "zendframework/zend-stdlib": "^2.7.7 || ^3.0.1", + "zendframework/zend-validator": "^2.8.1", + "zendframework/zend-view": "^2.8.1", + "zfcampus/zf-api-problem": "^1.2.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8", + "squizlabs/php_codesniffer": "^2.3.1", + "zfcampus/zf-hal": "^1.4" + }, + "suggest": { + "zendframework/zend-console": "^2.3, if you intend to use the RequestFactory" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev", + "dev-develop": "1.3-dev" + }, + "zf": { + "module": "ZF\\ContentNegotiation" + } + }, + "autoload": { + "psr-4": { + "ZF\\ContentNegotiation\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "ZF2 Module providing content-negotiation features", + "homepage": "http://apigility.org/", + "keywords": [ + "content-negotiation", + "module", + "zend", + "zf2" + ], + "time": "2016-07-07 21:13:40" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14 21:17:01" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2015-12-27 11:43:31" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "9270140b940ff02e58ec577c237274e92cd40cdd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9270140b940ff02e58ec577c237274e92cd40cdd", + "reference": "9270140b940ff02e58ec577c237274e92cd40cdd", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0@dev", + "phpdocumentor/type-resolver": "^0.2.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2016-06-10 09:48:41" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", + "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2016-06-10 07:14:17" + }, + { + "name": "phpspec/prophecy", + "version": "v1.6.1", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "58a8137754bc24b25740d4281399a4a3596058e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0", + "reference": "58a8137754bc24b25740d4281399a4a3596058e0", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "sebastian/comparator": "^1.1", + "sebastian/recursion-context": "^1.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2016-06-07 08:13:47" + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2015-10-06 15:47:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2015-06-21 13:08:43" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21 13:50:34" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4|~5" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2016-05-12 18:03:57" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2015-09-15 10:49:45" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.26", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "fc1d8cd5b5de11625979125c5639347896ac2c74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fc1d8cd5b5de11625979125c5639347896ac2c74", + "reference": "fc1d8cd5b5de11625979125c5639347896ac2c74", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.1", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2016-05-17 03:09:28" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02 06:51:40" + }, + { + "name": "sebastian/comparator", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2015-07-26 15:48:44" + }, + { + "name": "sebastian/diff", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2015-12-08 07:14:41" + }, + { + "name": "sebastian/environment", + "version": "1.3.7", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/4e8f0da10ac5802913afc151413bc8c53b6c2716", + "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-05-17 03:18:57" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-06-17 09:04:28" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12 03:26:01" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "913401df809e99e4f47b27cdd781f4a258d58791" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", + "reference": "913401df809e99e4f47b27cdd781f4a258d58791", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2015-11-11 19:50:13" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21 13:59:46" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.6.2", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "4edb770cb853def6e60c93abb088ad5ac2010c83" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/4edb770cb853def6e60c93abb088ad5ac2010c83", + "reference": "4edb770cb853def6e60c93abb088ad5ac2010c83", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2016-07-13 23:29:13" + }, + { + "name": "symfony/yaml", + "version": "v3.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "2884c26ce4c1d61aebf423a8b912950fe7c764de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/2884c26ce4c1d61aebf423a8b912950fe7c764de", + "reference": "2884c26ce4c1d61aebf423a8b912950fe7c764de", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2016-06-29 05:41:56" + }, + { + "name": "webmozart/assert", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "30eed06dd6bc88410a4ff7f77b6d22f3ce13dbde" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/30eed06dd6bc88410a4ff7f77b6d22f3ce13dbde", + "reference": "30eed06dd6bc88410a4ff7f77b6d22f3ce13dbde", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2015-08-24 13:29:44" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "^5.6 || ^7.0" + }, + "platform-dev": [] +} diff --git a/config/module.config.php b/config/module.config.php index 7ee91fb..1261d25 100644 --- a/config/module.config.php +++ b/config/module.config.php @@ -4,77 +4,79 @@ * @copyright Copyright (c) 2014 Zend Technologies USA Inc. (http://www.zend.com) */ -return array( - 'router' => array( - 'routes' => array( - 'zf-apigility' => array( - 'child_routes' => array( - 'swagger' => array( - 'type' => 'Zend\Mvc\Router\Http\Segment', - 'options' => array( +namespace ZF\Apigility\Documentation\Swagger; + +return [ + 'router' => [ + 'routes' => [ + 'zf-apigility' => [ + 'child_routes' => [ + 'swagger' => [ + 'type' => 'segment', + 'options' => [ 'route' => '/swagger', - 'defaults' => array( - 'controller' => 'ZF\Apigility\Documentation\Swagger\SwaggerUi', + 'defaults' => [ + 'controller' => SwaggerUi::class, 'action' => 'list', - ), - ), + ], + ], 'may_terminate' => true, - 'child_routes' => array( - 'api' => array( - 'type' => 'Segment', - 'options' => array( + 'child_routes' => [ + 'api' => [ + 'type' => 'segment', + 'options' => [ 'route' => '/:api', - 'defaults' => array( + 'defaults' => [ 'action' => 'show', - ), - ), + ], + ], 'may_terminate' => true, - ), - ), - ), - ), - ), - ), - ), + ], + ], + ], + ], + ], + ], + ], - 'service_manager' => array( - 'factories' => array( - 'ZF\Apigility\Documentation\Swagger\SwaggerViewStrategy' => 'ZF\Apigility\Documentation\Swagger\SwaggerViewStrategyFactory', - ), - ), + 'service_manager' => [ + 'factories' => [ + SwaggerViewStrategy::class => SwaggerViewStrategyFactory::class, + ], + ], - 'controllers' => array( - 'factories' => array( - 'ZF\Apigility\Documentation\Swagger\SwaggerUi' => 'ZF\Apigility\Documentation\Swagger\SwaggerUiControllerFactory', - ), - ), + 'controllers' => [ + 'factories' => [ + SwaggerUi::class => SwaggerUiControllerFactory::class, + ], + ], - 'view_manager' => array( - 'template_path_stack' => array( + 'view_manager' => [ + 'template_path_stack' => [ 'zf-apigility-documentation-swagger' => __DIR__ . '/../view', - ), - ), + ], + ], - 'asset_manager' => array( - 'resolver_configs' => array( - 'paths' => array( + 'asset_manager' => [ + 'resolver_configs' => [ + 'paths' => [ __DIR__ . '/../asset', - ), - ), - ), + ], + ], + ], - 'zf-content-negotiation' => array( - 'accept_whitelist' => array( - 'ZF\Apigility\Documentation\Controller' => array( + 'zf-content-negotiation' => [ + 'accept_whitelist' => [ + 'ZF\Apigility\Documentation\Controller' => [ 0 => 'application/vnd.swagger+json', - ), - ), - 'selectors' => array( - 'Documentation' => array( - 'ZF\Apigility\Documentation\Swagger\ViewModel' => array( + ], + ], + 'selectors' => [ + 'Documentation' => [ + ViewModel::class => [ 'application/vnd.swagger+json', - ), - ) - ) - ), -); + ], + ], + ], + ], +]; diff --git a/phpcs.xml b/phpcs.xml index e994eae..1737a9d 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -16,6 +16,7 @@ + config src test diff --git a/phpunit.xml b/phpunit.xml.dist similarity index 100% rename from phpunit.xml rename to phpunit.xml.dist diff --git a/src/Api.php b/src/Api.php index 6dd7d4d..a992d1a 100644 --- a/src/Api.php +++ b/src/Api.php @@ -33,7 +33,7 @@ public function toArray() $services[] = [ 'description' => ($description = $service->getDescription()) ? $description - : 'Operations for ' . $service->getName(), + : '', 'path' => '/' . $service->getName() ]; } diff --git a/src/Module.php b/src/Module.php new file mode 100644 index 0000000..a327568 --- /dev/null +++ b/src/Module.php @@ -0,0 +1,59 @@ +getApplication(); + $events = $app->getEventManager(); + $events->attach('render', [$this, 'onRender'], 100); + } + + /** + * Listen to render event. + * + * Attaches the SwaggerViewStrategy to the view event manager instance if + * a Swagger view model is detected. + * + * @param \Zend\Mvc\MvcEvent $e + * @return void + */ + public function onRender($e) + { + $model = $e->getResult(); + if (! $model instanceof ViewModel) { + return; + } + + $app = $e->getApplication(); + $services = $app->getServiceManager(); + $view = $services->get('View'); + $events = $view->getEventManager(); + $services->get(SwaggerViewStrategy::class)->attach($events); + } +} diff --git a/src/Service.php b/src/Service.php index 59a5399..533f296 100644 --- a/src/Service.php +++ b/src/Service.php @@ -1,7 +1,7 @@ 'path', - 'name' => $paramSegmentName, + 'paramType' => 'path', + 'name' => $paramSegmentName, 'description' => 'URL parameter ' . $paramSegmentName, - 'dataType' => 'string', - 'required' => false, - 'minimum' => 0, - 'maximum' => 1 + 'dataType' => 'string', + 'required' => false, + 'minimum' => 0, + 'maximum' => 1 ]; } $postPatchPutBodyParameter = [ - 'name' => 'body', + 'name' => 'body', 'paramType' => 'body', - 'required' => true, - 'type' => $service->getName() + 'required' => true, + 'type' => $service->getName() ]; $operationGroups = []; // if there is a routeIdentifierName, this is REST service, need to enumerate if ($service->routeIdentifierName) { - $entityOperations = []; + $entityOperations = []; $collectionOperations = []; // find all COLLECTION operations foreach ($service->operations as $collectionOperation) { - $method = $collectionOperation->getHttpMethod(); + $method = $collectionOperation->getHttpMethod(); // collection parameters $collectionParameters = $templateParameters; @@ -125,8 +125,8 @@ public function toArray() // find all other operations $operations = []; foreach ($service->operations as $operation) { - $method = $operation->getHttpMethod(); - $parameters = array_values($templateParameters); + $method = $operation->getHttpMethod(); + $parameters = array_values($templateParameters); if (in_array($method, ['POST', 'PUT', 'PATCH'])) { $parameters[] = $postPatchPutBodyParameter; @@ -157,7 +157,8 @@ public function toArray() $requiredProperties = $properties = []; foreach ($fields as $field) { $properties[$field->getName()] = [ - 'type' => method_exists($field, 'getType') ? $field->getType() : 'string', + 'type' => method_exists($field, 'getFieldType') ? $field->getFieldType() : 'string', + 'dataType' => method_exists($field, 'getFieldType') ? $field->getFieldType() : 'string', 'description' => $field->getDescription() ]; if ($field->isRequired()) { diff --git a/src/SwaggerUiControllerFactory.php b/src/SwaggerUiControllerFactory.php index 6357eaf..441e3aa 100644 --- a/src/SwaggerUiControllerFactory.php +++ b/src/SwaggerUiControllerFactory.php @@ -1,32 +1,53 @@ getServiceLocator(); - if (!$services->has('ZF\Apigility\Documentation\ApiFactory')) { + if (! $container->has(ApiFactory::class)) { throw new ServiceNotCreatedException(sprintf( - '%s\SwaggerUiController requires the service ZF\Apigility\Documentation\ApiFactory, ' - . 'which was not found', - __NAMESPACE__ + '%s requires the service %s, which was not found', + SwaggerUiController::class, + ApiFactory::class )); } - return new SwaggerUiController($services->get('ZF\Apigility\Documentation\ApiFactory')); + + return new SwaggerUiController($services->get(ApiFactory::class)); + } + + /** + * Create and return a SwaggerUiController instance. + * + * Provided for backwards compatibility; proxies to __invoke(). + * + * @param ServiceLocatorInterface $controllers + * @return SwaggerUiController + * @throws ServiceNotCreatedException when ApiFactory service is missing. + */ + public function createService(ServiceLocatorInterface $controllers) + { + $container = $controllers->getServiceLocator() ?: $controllers; + return $this($container, SwaggerUiController::class); } } diff --git a/src/SwaggerViewStrategy.php b/src/SwaggerViewStrategy.php index 0f80fa4..62c3390 100644 --- a/src/SwaggerViewStrategy.php +++ b/src/SwaggerViewStrategy.php @@ -1,18 +1,21 @@ get('ViewJsonRenderer')); + return new SwaggerViewStrategy($container->get('ViewJsonRenderer')); } } diff --git a/src/ViewModel.php b/src/ViewModel.php index c74444e..070a616 100644 --- a/src/ViewModel.php +++ b/src/ViewModel.php @@ -1,7 +1,7 @@ variables) + if (! array_key_exists('type', $this->variables) || empty($this->variables['type']) ) { return $this->variables; diff --git a/test/SwaggerViewStrategyTest.php b/test/SwaggerViewStrategyTest.php index b388557..0d89c8f 100644 --- a/test/SwaggerViewStrategyTest.php +++ b/test/SwaggerViewStrategyTest.php @@ -8,6 +8,7 @@ use PHPUnit_Framework_TestCase as TestCase; use Zend\EventManager\EventManager; +use Zend\EventManager\Test\EventListenerIntrospectionTrait; use Zend\Http\Response as HttpResponse; use Zend\Stdlib\Response as StdlibResponse; use Zend\View\Renderer\JsonRenderer; @@ -17,6 +18,8 @@ class SwaggerViewStrategyTest extends TestCase { + use EventListenerIntrospectionTrait; + public function setUp() { $this->events = new EventManager(); @@ -27,17 +30,19 @@ public function setUp() public function testStrategyAttachesToViewEventsAtPriority200() { - $listeners = $this->events->getListeners(ViewEvent::EVENT_RENDERER); - $this->assertEquals(1, count($listeners)); - $listener = $listeners->top(); - $this->assertEquals([$this->strategy, 'selectRenderer'], $listener->getCallback()); - $this->assertEquals(200, $listener->getMetadatum('priority')); + $this->assertListenerAtPriority( + [$this->strategy, 'selectRenderer'], + 200, + ViewEvent::EVENT_RENDERER, + $this->events + ); - $listeners = $this->events->getListeners(ViewEvent::EVENT_RESPONSE); - $this->assertEquals(1, count($listeners)); - $listener = $listeners->top(); - $this->assertEquals([$this->strategy, 'injectResponse'], $listener->getCallback()); - $this->assertEquals(200, $listener->getMetadatum('priority')); + $this->assertListenerAtPriority( + [$this->strategy, 'injectResponse'], + 200, + ViewEvent::EVENT_RESPONSE, + $this->events + ); } public function testSelectRendererReturnsJsonRendererWhenSwaggerViewModelIsPresentInEvent()