diff --git a/CHANGELOG.md b/CHANGELOG.md index fc1895e..61410a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ Yii Framework 2 bootstrap5 extension Change Log 2.0.2 under development ----------------------- +- Bug #6: yii\bootstrap5\BaseHtml::staticControl(): Argument #1 ($value) must be of type string, int given (dicrtarasov) - Bug #9: fixed default ActiveField::hintOptions (dicrtarasov) diff --git a/src/BaseHtml.php b/src/BaseHtml.php index e307a1d..1bb7213 100644 --- a/src/BaseHtml.php +++ b/src/BaseHtml.php @@ -49,7 +49,6 @@ abstract class BaseHtml extends \yii\helpers\Html public static function staticControl(string $value, array $options = []): string { static::addCssClass($options, 'form-control-plaintext'); - $value = (string)$value; $options['readonly'] = true; return static::input('text', null, $value, $options); @@ -64,7 +63,7 @@ abstract class BaseHtml extends \yii\helpers\Html * @return string generated HTML * @see staticControl() */ - public static function activeStaticControl(Model $model, string $attribute, $options = []): string + public static function activeStaticControl(Model $model, string $attribute, array $options = []): string { if (isset($options['value'])) { $value = $options['value']; @@ -73,11 +72,11 @@ abstract class BaseHtml extends \yii\helpers\Html $value = static::getAttributeValue($model, $attribute); } - return static::staticControl($value, $options); + return static::staticControl((string)$value, $options); } /** - * {@inheritdoc} + * {@inheritDoc} */ public static function radioList($name, $selection = null, $items = [], $options = []): string { diff --git a/tests/ActiveFormTest.php b/tests/ActiveFormTest.php index 4abfd3f..0c150db 100644 --- a/tests/ActiveFormTest.php +++ b/tests/ActiveFormTest.php @@ -310,6 +310,58 @@ HTML; $this->assertContainsWithoutLE($expected4, $out); } + public function testStaticControlRendering() + { + ActiveForm::$counter = 0; + ob_start(); + $model = new User(); + $model->setAttributes([ + 'id' => 1, + 'firstName' => 'John', + 'lastName' => 'Doe' + ]); + $form = ActiveForm::begin([ + 'action' => '/some-action', + 'layout' => ActiveForm::LAYOUT_DEFAULT + ]); + echo $form->field($model, 'id')->staticControl(); + echo $form->field($model, 'firstName')->staticControl(); + echo $form->field($model, 'lastName')->staticControl(); + echo $form->field($model, 'username')->staticControl(); + ActiveForm::end(); + $out = ob_get_clean(); + + $expected = << + + + +
+ +HTML; + + $expected2 = << + + + + + +HTML; + $expected3 = << + + + + + +HTML; + + $this->assertContainsWithoutLE($expected, $out); + $this->assertContainsWithoutLE($expected2, $out); + $this->assertContainsWithoutLE($expected3, $out); + } + /** * Fixes #128 * @see https://github.com/yiisoft/yii2-bootstrap5/issues/128 diff --git a/tests/data/User.php b/tests/data/User.php index 0e068c4..ccda0e6 100644 --- a/tests/data/User.php +++ b/tests/data/User.php @@ -11,6 +11,7 @@ use yii\base\Model; class User extends Model { + public $id; public $firstName; public $lastName; public $username; @@ -22,6 +23,8 @@ class User extends Model public function rules() { return [ + ['id', 'integer'], + [['firstName', 'lastName'], 'string'], ['username', 'string', 'min' => 4], ['password', 'string', 'min' => 8, 'max' => '20'], [['username', 'password'], 'required']