caridy 2011-05-27 02:36:12 4979次浏览 10条回复 0 0 0

控制器

public function getViewStateArr() {
  return array(
    '1' => '完全公开',
    '2' => '完全不公开',
    '3' => '仅对本站公开',
  );
}

public function getViewText($v) {
  $ViewState = $this->getViewStateArr();
  if (isset($ViewState[$v])) {
    return $ViewState[$v];
  } else {
    return '未设置';
}

视图:

<div class="row">
<?php echo $form->labelEx($model, 'is_view'); ?>
<?php
echo $form->dropDownList($model, 'is_view', $this->ViewStateArr, //array('empty'=>'- 请选择 -','0'=>'完全不公开','完全公开','仅对本站公开'),
array(
  'empty' => '- 请选择 -',
  'options' => array(
  'empty'=> array('selected'=>'selected'),
  )
)
); ?>
<?php echo $form->error($model, 'is_view'); ?>
</div>

如果使用 'empty' => '- 请选择 -',来生成一个- 请选择 -项时,这个为空,在模型中验证是可以通过的,模型验证规则是:

array('is_view, update_time, create_user_id, update_user_id', 'numerical', 'integerOnly'=>true),
'empty'=> array('selected'=>'selected'), 

这个也是不生效的.如果有empty,只能生成$value这样子(看代码中是产生这个) 还有一个问题就是,如果列表的数组是由0开始的,则默认选择了0这个值的那一项. 根据现在这个情况,如何让他默认选择在值为Empty的项上?验证的时候,如何保证这个为空值的也不对呢?

  • 回复于 2011-05-27 07:52 举报

    验证的时候不应该是numerical,而应该加上required。

    <?php echo $form->dropDownList($model, 'is_view', $this->ViewStateArr,array( 'prompt' => '- 请选择 -' )); ?>
    

    这样应该就可以了吧。

  • 回复于 2011-05-27 08:01 举报

    谢谢舰长.

  • 回复于 2011-05-27 08:02 举报

    小星,来的好早啊!加油!

    问题解决了吗?

  • 回复于 2011-05-27 08:06 举报

    可以是数字,在他的前一条规则上写上必选就可以的. 另外是不是验证规则也是按一条条前后顺序执行的?
    验证规则是下面这样的.

    public function rules()
    {
    	return array(
    		array('resume_name,is_view', 'required'),
    		array('is_view, update_time, create_user_id, update_user_id', 'numerical', 'integerOnly'=>true),
    		array('resume_name', 'length', 'max'=>50),
    		array('create_time', 'length', 'max'=>10),
    		array('realname', 'length', 'max'=>16),
    		array('id, resume_name, is_view, create_time, update_time, create_user_id, update_user_id, realname', 'safe', 'on'=>'search'),
    	);
    }
    
  • 回复于 2011-05-27 09:30 举报
    public function getViewStateArr() {
      return array(
        '1' => '完全公开',
        '2' => '完全不公开',
        '0' => '仅对本站公开',
      );
    }
    

    如果里面有一项是0的话,新添加的时候,默认会被选择这一项..这个是很杯具的事情. 有解决方案吗?

  • 回复于 2011-05-27 09:55 举报

    了解了一个新的属性prompt

  • 回复于 2011-05-27 12:27 举报

    这个是提示属于,以前我一直以为用empty这个呢.
    估计默认为0是因为验证他一定为数字的原因吧,这个暂时找不到解决方案,只好把选择值由1开始了.

  • 回复于 2011-05-27 12:36 举报
    public function getViewStateArr() {
      return array(
        ''=>'-请选择-',
        '1' => '完全公开',
        '2' => '完全不公开',
        '0' => '仅对本站公开',
      );
    }
    

    这样也行吧!

  • 回复于 2011-05-27 13:18 举报

    是可以生成请选择,不过不能默认是这个.新建的时候是想让他默认请选择的,但是如果有值为0的,就会把值为0的那一项做为默认值了.

  • 回复于 2012-05-24 13:56 举报

    那就把请选择的值改为0就行了吧

您需要登录后才可以回复。登录 | 立即注册