فهرست منبع

[Form] Changed semantics of "always_empty" option in PasswordField

If the option is true, the password is never written into the input field's value. If it is false, it is only written into the input field's value after submitting a form with errors.

The default value for "always_empty" is true.
Bernhard Schussek 14 سال پیش
والد
کامیت
cd64046811
2فایلهای تغییر یافته به همراه45 افزوده شده و 2 حذف شده
  1. 4 2
      src/Symfony/Component/Form/PasswordField.php
  2. 41 0
      tests/Symfony/Tests/Component/Form/PasswordFieldTest.php

+ 4 - 2
src/Symfony/Component/Form/PasswordField.php

@@ -28,10 +28,12 @@ class PasswordField extends TextField
         parent::configure();
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public function getDisplayedData()
     {
-        // TESTME
-        return $this->getOption('always_empty') && !$this->isBound()
+        return $this->getOption('always_empty') || !$this->isBound()
                 ? ''
                 : parent::getDisplayedData();
     }

+ 41 - 0
tests/Symfony/Tests/Component/Form/PasswordFieldTest.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace Symfony\Tests\Component\Form;
+
+/*
+ * This file is part of the Symfony framework.
+ *
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+use Symfony\Component\Form\PasswordField;
+
+class PasswordFieldTest extends \PHPUnit_Framework_TestCase
+{
+    public function testGetDisplayedData()
+    {
+        $field = new PasswordField('name');
+        $field->setData('before');
+
+        $this->assertSame('', $field->getDisplayedData());
+
+        $field->bind('after');
+
+        $this->assertSame('', $field->getDisplayedData());
+    }
+
+    public function testGetDisplayedDataWithAlwaysEmptyDisabled()
+    {
+        $field = new PasswordField('name', array('always_empty' => false));
+        $field->setData('before');
+
+        $this->assertSame('', $field->getDisplayedData());
+
+        $field->bind('after');
+
+        $this->assertSame('after', $field->getDisplayedData());
+    }
+}