1

在我的模型中,我有属性 - 规格:

    class Category extends CActiveRecord
    {
        private $_specifications = array();

        public function getSpecifications()
        {
                    return $this->_specifications;
        }

        public function setSpecifications($specifications)
        {
                    $this->_specifications = implode(', ', $specifications);
        }

所以我希望规范是一个数组。

我的视图文件:

<div id="specifications" class="row">
    <?php echo $form->labelEx($model,'specifications'); ?>
    <?php echo $form->textField($model,'specifications',array('rows'=>6, 'cols'=>50, 'name'=>'Category[specifications][0]', 'class' => 'clonedInput')); ?>
    <?php echo $form->textField($model,'specifications',array('rows'=>6, 'cols'=>50, 'name'=>'Category[specifications][1]', 'class' => 'clonedInput')); ?>
    <?php echo $form->error($model,'specifications'); ?>
</div>

当我发送表单时,我收到一个错误:

htmlspecialchars() expects parameter 1 to be string, array given
...
public static function encode($text)
84     {
85         return htmlspecialchars($text,ENT_QUOTES,Yii::app()->charset);
86     }

我试图禁用编码:

<?php echo $form->textField($model,'specifications',array('encode'=>false, 'rows'=>6, 'cols'=>50, 'name'=>'Category[specifications][0]', 'class' => 'clonedInput')); ?>
<?php echo $form->textField($model,'specifications',array('encode'=>false, 'rows'=>6, 'cols'=>50, 'name'=>'Category[specifications][1]', 'class' => 'clonedInput')); ?>

但在这种情况下,这是另一个错误:

Array to string conversion
...
2216                 $html .= ' ' . $name . '="' . ($raw ? $value : self::encode($value)) . '"';

任何人都可以提供建议,我应该怎么做才能从表单中传递一个数组?谢谢。

4

3 回答 3

1

如何将数组传递给单个文本字段?它应该显示什么?

您可以为此创建一个虚拟属性。

在模型中:

private $_specifications = array();

public function getSpecifications()
{
    return implode(', ', $this->_specifications);
}

视图可以保持不变。

编辑:

当然,如果您希望能够写入属性,您也需要一个 setter。

public function setSpecifications($specifications)
{
    $this->_specifications = explode(', ', $specifications);
}

请参考http://www.yiiframework.com/wiki/167/understanding-virtual-attributes-and-get-set-methods/

于 2013-04-07T18:28:18.213 回答
0

由于您的specifications属性是一个数组,您应该简单地创建一个循环来显示相应的输入,例如:

foreach ($model->specifications as $s)
{
  echo Chtml::textField('Category[specifications][]', $s, array('rows'=>6, 'cols'=>50, 'class' => 'clonedInput'));
}
于 2013-04-08T06:59:52.913 回答
0
<?php echo $form->textField($model,'specifications',array('encode'=>false, 'rows'=>6, 'cols'=>50, 'name'=>'Category[specifications][0]', 'class' => 'clonedInput')); ?>
<?php echo $form->textField($model,'specifications',array('encode'=>false, 'rows'=>6, 'cols'=>50, 'name'=>'Category[specifications][1]', 'class' => 'clonedInput')); ?>

我认为规格将显示两次。

于 2015-03-24T08:50:44.043 回答