Skip to content

Commit

Permalink
Implement controller validation and hydration events
Browse files Browse the repository at this point in the history
  • Loading branch information
danizord committed Apr 23, 2014
1 parent e62c997 commit ae1e65e
Show file tree
Hide file tree
Showing 14 changed files with 722 additions and 174 deletions.
53 changes: 0 additions & 53 deletions src/ZfrRest/Mvc/Controller/AbstractRestfulController.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@

use Doctrine\Common\Collections\Collection;
use Zend\Http\Request as HttpRequest;
use Zend\InputFilter\InputFilterInterface;
use Zend\InputFilter\InputFilterPluginManager;
use Zend\Mvc\Controller\AbstractController;
use Zend\Mvc\MvcEvent;
use Zend\Paginator\Paginator;
Expand All @@ -48,25 +46,6 @@ class AbstractRestfulController extends AbstractController
*/
protected $methodHandlerManager;

/**
* If this is set to true, then controller will automatically instantiate the input filter specified in
* resource metadata (if there is one) - from service locator first, or directly instantiate it if not found -,
* and validate data. If data is incorrect, it will return a 400 HTTP error (Bad Request) with the failed
* validation messages in it).
*
* @var bool
*/
protected $autoValidate = true;

/**
* If this is set to true, then controller will automatically instantiate the hydrator specified in resource
* metadata (if there is one) - from service locator first, or directly instantiate it if not found - and
* hydrate resource object with previously validated data
*
* @var bool
*/
protected $autoHydrate = true;

/**
* {@inheritDoc}
*/
Expand Down Expand Up @@ -133,36 +112,4 @@ public function getMethodHandlerManager()

return $this->methodHandlerManager;
}

/**
* Hook to configure an input filter fetched/created by ZfrRest
*
* @param InputFilterPluginManager $inputFilterPluginManager
* @param string $inputFilterName
* @return InputFilterInterface
*/
public function getInputFilter(InputFilterPluginManager $inputFilterPluginManager, $inputFilterName)
{
return $inputFilterPluginManager->get($inputFilterName);
}

/**
* Should auto validate?
*
* @return bool
*/
public function getAutoValidate()
{
return $this->autoValidate;
}

/**
* Should auto hydrate?
*
* @return bool
*/
public function getAutoHydrate()
{
return $this->autoHydrate;
}
}
131 changes: 131 additions & 0 deletions src/ZfrRest/Mvc/Controller/Event/HydrationEvent.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
<?php
/*
* 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.
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the MIT license.
*/

namespace ZfrRest\Mvc\Controller\Event;

use Zend\EventManager\Event;
use Zend\Stdlib\Hydrator\HydratorInterface;
use Zend\ServiceManager\AbstractPluginManager;
use ZfrRest\Resource\ResourceInterface;

/**
* @author Daniel Gimenes <daniel@danielgimenes.com.br>
* @licence MIT
*/
class HydrationEvent extends Event
{
/**
* Event names
*/
const EVENT_HYDRATE_PRE = 'hydrate.pre';
const EVENT_HYDRATE_POST = 'hydrate.post';

/**
* @var bool
*/
protected $autoHydrate = true;

/**
* @var ResourceInterface
*/
protected $resource;

/**
* @var AbstractPluginManager
*/
protected $hydratorManager;

/**
* @var null|HydratorInterface
*/
protected $hydrator;

/**
* @param ResourceInterface $resource
* @param AbstractPluginManager $hydratorManager
*/
public function __construct(ResourceInterface $resource, AbstractPluginManager $hydratorManager)
{
$this->resource = $resource;
$this->hydratorManager = $hydratorManager;
}

/**
* @param bool $autoHydrate
*/
public function setAutoHydrate($autoHydrate)
{
$this->autoHydrate = (bool) $autoHydrate;
}

/**
* @return bool
*/
public function getAutoHydrate()
{
return $this->autoHydrate;
}

/**
* @param ResourceInterface $resource
*/
public function setResource(ResourceInterface $resource)
{
$this->resource = $resource;
}

/**
* @return ResourceInterface
*/
public function getResource()
{
return $this->resource;
}

/**
* @param AbstractPluginManager $hydratorManager
*/
public function setHydratorManager(AbstractPluginManager $hydratorManager)
{
$this->hydratorManager = $hydratorManager;
}

/**
* @return AbstractPluginManager
*/
public function getHydratorManager()
{
return $this->hydratorManager;
}

/**
* @param HydratorInterface $hydrator
*/
public function setHydrator(HydratorInterface $hydrator)
{
$this->hydrator = $hydrator;
}

/**
* @return null|HydratorInterface
*/
public function getHydrator()
{
return $this->hydrator;
}
}
132 changes: 132 additions & 0 deletions src/ZfrRest/Mvc/Controller/Event/ValidationEvent.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
<?php
/*
* 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.
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the MIT license.
*/

namespace ZfrRest\Mvc\Controller\Event;

use Zend\EventManager\Event;
use Zend\InputFilter\InputFilterInterface;
use Zend\ServiceManager\AbstractPluginManager;
use ZfrRest\Resource\ResourceInterface;

/**
* @author Daniel Gimenes <daniel@danielgimenes.com.br>
* @licence MIT
*/
class ValidationEvent extends Event
{
/**
* Event names
*/
const EVENT_VALIDATE_PRE = 'validate.pre';
const EVENT_VALIDATE_ERROR = 'validate.error';
const EVENT_VALIDATE_SUCCESS = 'validate.success';

/**
* @var bool
*/
protected $autoValidate = true;

/**
* @var ResourceInterface
*/
protected $resource;

/**
* @var AbstractPluginManager
*/
protected $inputFilterManager;

/**
* @var null|InputFilterInterface
*/
protected $inputFilter;

/**
* @param ResourceInterface $resource
* @param AbstractPluginManager $inputFilterManager
*/
public function __construct(ResourceInterface $resource, AbstractPluginManager $inputFilterManager)
{
$this->resource = $resource;
$this->inputFilterManager = $inputFilterManager;
}

/**
* @param bool $autoValidate
*/
public function setAutoValidate($autoValidate)
{
$this->autoValidate = (bool) $autoValidate;
}

/**
* @return bool
*/
public function getAutoValidate()
{
return $this->autoValidate;
}

/**
* @param ResourceInterface $resource
*/
public function setResource(ResourceInterface $resource)
{
$this->resource = $resource;
}

/**
* @return ResourceInterface
*/
public function getResource()
{
return $this->resource;
}

/**
* @param AbstractPluginManager $inputFilterManager
*/
public function setInputFilterManager(AbstractPluginManager $inputFilterManager)
{
$this->inputFilterManager = $inputFilterManager;
}

/**
* @return AbstractPluginManager
*/
public function getInputFilterManager()
{
return $this->inputFilterManager;
}

/**
* @param InputFilterInterface $inputFilter
*/
public function setInputFilter(InputFilterInterface $inputFilter)
{
$this->inputFilter = $inputFilter;
}

/**
* @return null|InputFilterInterface
*/
public function getInputFilter()
{
return $this->inputFilter;
}
}
Loading

0 comments on commit ae1e65e

Please sign in to comment.