Skip to content
This repository has been archived by the owner on Jan 8, 2020. It is now read-only.

Commit

Permalink
Add new validator to check if input is instance of a certain class
Browse files Browse the repository at this point in the history
Change-Id: I6365cf9a6652ca42a1f6897002e5abe455ed4f44
  • Loading branch information
Jurgen Van de Moere committed Sep 25, 2012
1 parent 892eeed commit 986df50
Showing 1 changed file with 112 additions and 0 deletions.
112 changes: 112 additions & 0 deletions library/Zend/Validator/IsInstanceOf.php
@@ -0,0 +1,112 @@
<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @package Zend_Validator
*/

namespace Zend\Validator;

use Traversable;
use Zend\Stdlib\ArrayUtils;
use Zend\Validator\AbstractValidator;

class IsInstanceOf extends AbstractValidator
{

const NOT_INSTANCE_OF = 'notInstanceOf';

/**
* Validation failure message template definitions
*
* @var array
*/
protected $messageTemplates = array(
self::NOT_INSTANCE_OF => "The input is not an instance of '%className%'"
);

/**
* Additional variables available for validation failure messages
*
* @var array
*/
protected $messageVariables = array(
'className' => 'className'
);

/**
* Class name
*
* @var string
*/
protected $className;

/**
* Sets validator options
*
* @param array|Traversable $options
* @throws Exception\InvalidArgumentException
*/
public function __construct($options = null)
{
if ($options instanceof Traversable) {
$options = ArrayUtils::iteratorToArray($options);
}
if (!is_array($options)) {
$options = func_get_args();

$tmpOptions = array();
$tmpOptions['classname'] = array_shift($options);

$options = $tmpOptions;
}

if (!array_key_exists('className', $options)) {
throw new Exception\InvalidArgumentException("Missing option 'className'");
}

$this->setClassName($options['className']);

parent::__construct($options);
}

/**
* Get class name
*
* @return string
*/
public function getClassName()
{
return $this->className;
}

/**
* Set class name
*
* @param string $className
* @return self
*/
public function setClassName($className)
{
$this->className = $className;
return $this;
}

/**
* Returns true if $value is instance of $this->className
*
* @param mixed $value
* @return boolean
*/
public function isValid($value)
{
if($value instanceof $this->className) {
return true;
}
$this->error(self::NOT_INSTANCE_OF);
return false;
}
}

0 comments on commit 986df50

Please sign in to comment.