在我的模型中,我有属性 - 规范:
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)) . '"';
任何人都可以提出建议,我该怎样做才能从表单传递一个数组?感谢。
答案 0 :(得分: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/
答案 1 :(得分:0)
由于您的specifications
属性是一个数组,因此您只需创建一个循环来显示相应的输入,例如:
foreach ($model->specifications as $s)
{
echo Chtml::textField('Category[specifications][]', $s, array('rows'=>6, 'cols'=>50, 'class' => 'clonedInput'));
}
答案 2 :(得分: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')); ?>
我认为规格会显示两次。