找到一个别人写的gridview小部件http://demos.krajee.com/grid-demo?page=2&per-page=10#configure

clipboard.png

点击电话号码就进行修改,并验证必填,但是提交到editmobile这个action并进行验证

[
  'class'=>'kartik\grid\EditableColumn',
  'attribute'=>'mobile',
  'pageSummary'=>'Total',
  'vAlign'=>'middle',
  'width'=>'210px',
  'readonly'=>function($model, $key, $index, $widget) {
     return (!$model->mobile)?$model->mobile:null; 
   },
   'editableOptions' => [
     'inputType' => \kartik\editable\Editable::INPUT_TEXT,
     'formOptions' => [
       'action' => 'editmobile',
      ],
      // 'placement' => 'left',//设置弹出框的位置
    ]
],

因为actionEditMobile绑定了editmobile场景,在editmobile场景下mobile才是必填项,而这个组件的验证场景是default,所以没有提示错误。
我们得在提交到editmobile时做一下处理。
我看了一下这个组件的代码,找到class EditableColumnAction 的 function validateEditable()
发现返回的数据都是

return ['output' => $value, 'message' => $message];

这下知道怎么写了吧

public function actionEditMobile()
{
  $post=Yii::$app->request->post(); 
  $id=!empty($post['editableKey'])?$post['editableKey']:false;   
  if(!$t_id){    
    $Info=Info::find()->where(['id'=>$id])->one();  
    $Info->setScenario('editmobile');
    $value["Info"] = $post['Info'][$post['editableIndex']]; 
    $Info->load($value);
    if(!$Info->save()){
      echo json_encode(["output"=>"","message"=> array_values($Info->getFirstErrors())[0]]);
      exit;
    }
  }
}

更改之后提示手机号不能为空

clipboard.png
备注:因为我的同事zacklee使用这个组件时遇到了这个问题,求助到我,所以我把解决的方法发上来


zebrayoung
240 声望35 粉丝

引用和评论

0 条评论