Skip to content
This repository was archived by the owner on Jan 21, 2020. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 40 additions & 22 deletions Module.php
Original file line number Diff line number Diff line change
@@ -1,86 +1,104 @@
<?php

/**
* @license http://opensource.org/licenses/BSD-3-Clause BSD-3-Clause
* @copyright Copyright (c) 2014 Zend Technologies USA Inc. (http://www.zend.com)
*/

namespace ZF\ApiProblem;

use Zend\EventManager\EventManagerInterface;
use Zend\Mvc\Application;
use Zend\Mvc\ResponseSender\SendResponseEvent;
use Zend\Mvc\MvcEvent;
use Zend\Mvc\SendResponseListener;
use Zend\ServiceManager\ServiceLocatorInterface;
use ZF\ApiProblem\Listener\ApiProblemListener;
use ZF\ApiProblem\Listener\SendApiProblemResponseListener;
use ZF\ApiProblem\View\ApiProblemStrategy;

/**
* ZF2 module
* ZF2 module.
*/
class Module
{
/**
* Retrieve autoloader configuration
* Retrieve autoloader configuration.
*
* @return array
*/
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array('namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/',
))
);
return [
'Zend\Loader\StandardAutoloader' => ['namespaces' => [
__NAMESPACE__ => __DIR__.'/src/',
]],
];
}

/**
* Retrieve module configuration
* Retrieve module configuration.
*
* @return array
*/
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
return include __DIR__.'/config/module.config.php';
}

/**
* Listener for bootstrap event
* Listener for bootstrap event.
*
* Attaches a render event.
*
* @param \Zend\Mvc\MvcEvent $e
* @param \Zend\Mvc\MvcEvent $e
*/
public function onBootstrap($e)
{
$app = $e->getTarget();
$app = $e->getTarget();
/** @var ServiceLocatorInterface $serviceManager */
$serviceManager = $app->getServiceManager();
$eventManager = $app->getEventManager();

$eventManager->attach($serviceManager->get('ZF\ApiProblem\ApiProblemListener'));
$eventManager->attach(MvcEvent::EVENT_RENDER, array($this, 'onRender'), 100);
/** @var EventManagerInterface $eventManager */
$eventManager = $app->getEventManager();

/** @var ApiProblemListener $apiProblemListener */
$apiProblemListener = $serviceManager->get(ApiProblemListener::class);
/** @var SendResponseListener $sendResponseListener */
$sendResponseListener = $serviceManager->get('SendResponseListener');

$apiProblemListener->attach($eventManager);
$eventManager->attach(MvcEvent::EVENT_RENDER, [$this, 'onRender'], 100);

$sendResponseListener->getEventManager()->attach(
SendResponseEvent::EVENT_SEND_RESPONSE,
$serviceManager->get('ZF\ApiProblem\Listener\SendApiProblemResponseListener'),
$serviceManager->get(SendApiProblemResponseListener::class),
-500
);
}

/**
* Listener for the render event
* Listener for the render event.
*
* Attaches a rendering/response strategy to the View.
*
* @param \Zend\Mvc\MvcEvent $e
* @param \Zend\Mvc\MvcEvent $e
*/
public function onRender($e)
{
$app = $e->getTarget();
/** @var Application $app */
$app = $e->getTarget();
$services = $app->getServiceManager();

if ($services->has('View')) {
$view = $services->get('View');
$view = $services->get('View');
/** @var EventManagerInterface $events */
$events = $view->getEventManager();

// register at high priority, to "beat" normal json strategy registered
// via view manager, as well as HAL strategy.
$events->attach($services->get('ZF\ApiProblem\ApiProblemStrategy'), 400);
/** @var ApiProblemStrategy $apiProblemStrategy */
$apiProblemStrategy = $services->get(ApiProblemStrategy::class);
$apiProblemStrategy->attach($events, 400);
}
}
}
59 changes: 59 additions & 0 deletions ModuleTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?php

/**
* Creator: adamgrabek
* Date: 08.06.2016
* Time: 00:06.
*/

namespace ZF\ApiProblem;

use PHPUnit_Framework_TestCase as TestCase;
use Zend\EventManager\EventManager;
use Zend\EventManager\SharedEventManager;
use Zend\Mvc\Application;
use Zend\Mvc\MvcEvent;
use Zend\Mvc\SendResponseListener;
use Zend\ServiceManager\ServiceLocatorInterface;
use ZF\ApiProblem\Listener\ApiProblemListener;
use ZF\ApiProblem\Listener\SendApiProblemResponseListener;

class ModuleTest extends TestCase
{
public function testOnBootstrap()
{
$module = new Module();

$application = $this->getMock(Application::class, [], [], '', false);
$serviceLocator = $this->getMockForAbstractClass(ServiceLocatorInterface::class);
$serviceLocator->method('get')->will($this->returnCallback([$this, 'serviceLocator']));

$eventManager = new EventManager(new SharedEventManager());
$event = $this->getMock(MvcEvent::class);

$application->method('getServiceManager')->willReturn($serviceLocator);
$application->method('getEventManager')->willReturn($eventManager);
$event->expects($this->once())->method('getTarget')->willReturn($application);

$module->onBootstrap($event);
}

public function serviceLocator($service)
{
switch ($service) {
case 'ZF\ApiProblem\Listener\ApiProblemListener':
return new ApiProblemListener();
break;
case 'SendResponseListener':
$listener = $this->getMock(SendResponseListener::class);
$listener->method('getEventManager')->willReturn(new EventManager());

return $listener;
break;
case SendApiProblemResponseListener::class :
return new SendApiProblemResponseListener();
default:
//
}
}
}
19 changes: 10 additions & 9 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,19 @@
}
},
"require": {
"php": ">=5.5",
"zendframework/zend-eventmanager": "~2.3",
"zendframework/zend-http": "~2.3",
"zendframework/zend-json": "~2.3",
"zendframework/zend-mvc": "~2.3",
"zendframework/zend-view": "~2.3"
"php": ">=5.6",
"zendframework/zend-eventmanager": "3.0.*",
"zendframework/zend-http": "2.5.*",
"zendframework/zend-json": "2.6.*",
"zendframework/zend-mvc": "3.0.*",
"zendframework/zend-view": "2.7.*"
},
"require-dev": {
"phpunit/phpunit": "~4.7",
"zendframework/zend-console": "~2.3",
"zendframework/zend-loader": "~2.3",
"squizlabs/php_codesniffer": "^2.3.1"
"zendframework/zend-console": "2.6.*",
"zendframework/zend-loader": "2.5.*",
"squizlabs/php_codesniffer": "^2.3.1",
"fabpot/php-cs-fixer": "1.9.*"
},
"autoload": {
"psr-4": {
Expand Down
53 changes: 32 additions & 21 deletions config/module.config.php
Original file line number Diff line number Diff line change
@@ -1,37 +1,48 @@
<?php

/**
* @license http://opensource.org/licenses/BSD-3-Clause BSD-3-Clause
* @copyright Copyright (c) 2014 Zend Technologies USA Inc. (http://www.zend.com)
*/
use ZF\ApiProblem\Factory\ApiProblemListenerFactory;
use ZF\ApiProblem\Factory\ApiProblemRendererFactory;
use ZF\ApiProblem\Factory\ApiProblemStrategyFactory;
use ZF\ApiProblem\Factory\RenderErrorListenerFactory;
use ZF\ApiProblem\Factory\SendApiProblemResponseListenerFactory;
use ZF\ApiProblem\Listener\ApiProblemListener;
use ZF\ApiProblem\Listener\RenderErrorListener;
use ZF\ApiProblem\Listener\SendApiProblemResponseListener;
use ZF\ApiProblem\View\ApiProblemRenderer;
use ZF\ApiProblem\View\ApiProblemStrategy;

return array(
'service_manager' => array(
'aliases' => array(
'ZF\ApiProblem\ApiProblemListener' => 'ZF\ApiProblem\Listener\ApiProblemListener',
'ZF\ApiProblem\RenderErrorListener' => 'ZF\ApiProblem\Listener\RenderErrorListener',
'ZF\ApiProblem\ApiProblemRenderer' => 'ZF\ApiProblem\View\ApiProblemRenderer',
'ZF\ApiProblem\ApiProblemStrategy' => 'ZF\ApiProblem\View\ApiProblemStrategy',
),
'factories' => array(
'ZF\ApiProblem\Listener\ApiProblemListener' => 'ZF\ApiProblem\Factory\ApiProblemListenerFactory',
'ZF\ApiProblem\Listener\RenderErrorListener' => 'ZF\ApiProblem\Factory\RenderErrorListenerFactory',
'ZF\ApiProblem\Listener\SendApiProblemResponseListener' => 'ZF\ApiProblem\Factory\SendApiProblemResponseListenerFactory',
'ZF\ApiProblem\View\ApiProblemRenderer' => 'ZF\ApiProblem\Factory\ApiProblemRendererFactory',
'ZF\ApiProblem\View\ApiProblemStrategy' => 'ZF\ApiProblem\Factory\ApiProblemStrategyFactory',
)
),
return [
'service_manager' => [
'aliases' => [
'ZF\ApiProblem\ApiProblemListener' => ApiProblemListener::class,
'ZF\ApiProblem\RenderErrorListener' => RenderErrorListener::class,
'ZF\ApiProblem\ApiProblemRenderer' => ApiProblemRenderer::class,
'ZF\ApiProblem\ApiProblemStrategy' => ApiProblemStrategy::class,
],
'factories' => [
ApiProblemListener::class => ApiProblemListenerFactory::class,
RenderErrorListener::class => RenderErrorListenerFactory::class,
SendApiProblemResponseListener::class => SendApiProblemResponseListenerFactory::class,
ApiProblemRenderer::class => ApiProblemRendererFactory::class,
ApiProblemStrategy::class => ApiProblemStrategyFactory::class,
],
],

'view_manager' => array(
'view_manager' => [
// Enable this in your application configuration in order to get full
// exception stack traces in your API-Problem responses.
'display_exceptions' => false,
),
],

'zf-api-problem' => array(
'zf-api-problem' => [
// Accept types that should allow ApiProblem responses
// 'accept_filters' => $stringOrArray,

// Array of controller service names that should enable the ApiProblem render.error listener
//'render_error_controllers' => array(),
)
);
],
];
3 changes: 3 additions & 0 deletions phpunit.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,8 @@
<testsuite name="ZFApiProblem Module Tests">
<directory>./test</directory>
</testsuite>
<testsuite name="ZFApiProblem Module Class tests">
<file>./ModuleTest.php</file>
</testsuite>
</testsuites>
</phpunit>
Loading