Jelajahi Sumber

[ZF-7128] Zend_Validate_Identical:

 - added check for all types (until now only string supported)

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@16380 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas 16 tahun lalu
induk
melakukan
1de658b33a

+ 27 - 0
documentation/manual/en/module_specs/Zend_Validate-Set.xml

@@ -166,6 +166,33 @@ if ($validator->isValid($iban)) {
         </para>
     </sect2>
 
+    <sect2 id="zend.validate.set.identical">
+        <title>Identical</title>
+        <para>
+            Returns <constant>TRUE</constant> if and only if a given token is identical
+            with <code>$value</code>. This validator can handle any given type.
+        </para>
+
+        <para>
+            The token to validate against can eighter be set as parameter at initiation,
+            or by using the <methodname>setToken()</methodname> method.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// Setting the token at initiation
+$validator = new Zend_Validate_Identical(array('one' => 'two'));
+if ($validator->isValid(array('one' => 'two'))) { // token valid
+    // do something
+}
+
+// Setting the token by using setToken()
+$validator->setToken(true);
+if ($validator->isValid(1)) { // token invalid
+    // do something
+}
+]]></programlisting>
+    </sect2>
+
     <sect2 id="zend.validate.set.in_array">
         <title>InArray</title>
         <para>

+ 8 - 6
library/Zend/Validate/Identical.php

@@ -50,19 +50,20 @@ class Zend_Validate_Identical extends Zend_Validate_Abstract
      * @var array
      */
     protected $_messageVariables = array(
-        'token' => '_token'
+        'token' => '_tokenString'
     );
 
     /**
      * Original token against which to validate
      * @var string
      */
+    protected $_tokenString;
     protected $_token;
 
     /**
      * Sets validator options
      *
-     * @param  string $token
+     * @param  mixed $token
      * @return void
      */
     public function __construct($token = null)
@@ -75,12 +76,13 @@ class Zend_Validate_Identical extends Zend_Validate_Abstract
     /**
      * Set token against which to compare
      *
-     * @param  string $token
+     * @param  mixed $token
      * @return Zend_Validate_Identical
      */
     public function setToken($token)
     {
-        $this->_token = (string) $token;
+        $this->_tokenstring = (string) $token;
+        $this->_token       = $token;
         return $this;
     }
 
@@ -105,8 +107,8 @@ class Zend_Validate_Identical extends Zend_Validate_Abstract
      */
     public function isValid($value)
     {
-        $this->_setValue($value);
-        $token = $this->getToken();
+        $this->_setValue((string) $value);
+        $token        = $this->getToken();
 
         if ($token === null) {
             $this->_error(self::MISSING_TOKEN);

+ 14 - 0
tests/Zend/Validate/IdenticalTest.php

@@ -122,6 +122,20 @@ class Zend_Validate_IdenticalTest extends PHPUnit_Framework_TestCase
         $this->validator->setToken('');
         $this->assertTrue($this->validator->isValid(''));
     }
+
+    /**
+     * @see ZF-7128
+     */
+    public function testValidatingAgainstNonStrings()
+    {
+        $this->validator->setToken(true);
+        $this->assertTrue($this->validator->isValid(true));
+        $this->assertFalse($this->validator->isValid(1));
+
+        $this->validator->setToken(array('one' => 'two', 'three'));
+        $this->assertTrue($this->validator->isValid(array('one' => 'two', 'three')));
+        $this->assertFalse($this->validator->isValid(array()));
+    }
 }
 
 // Call Zend_Validate_IdenticalTest::main() if this source file is executed directly.