如何通过POST提交,批量修改数整个表单据(不止单项)? [ 2.0 版本 ]
<?php $form=ActiveForm::begin([
'fieldConfig'=>['template'=>'<div class="layui-input-block">{label}{input}{error}</div>'],
'options'=>[
//'class'=>'horizontal',
'id'=>'form_adminmenuadd',
'style'=>'margin-top:15px;',
],
]); ?>
<div class="layui-form-item layui-col-md8">
<?php echo $form->field($pmodel,'id')->dropDownList($list,[
"class"=>"layui-input",
"autocomplete"=>"off",
"lay-verify"=>"required",
"placeholder"=>"请输入菜单名称"])->label('父级菜单') ?>
</div>
<?php echo $form->field($model,'id')->hiddenInput([
"class"=>"layui-input",
"autocomplete"=>"off",
"lay-verify"=>"required",
"placeholder"=>"请输入菜单名称"])->label('父级菜单') ?>
<div class="layui-form-item layui-col-md8">
<?php echo $form->field($model,'name')->textInput([
"class"=>"layui-input",
"autocomplete"=>"off",
"lay-verify"=>"required",
"placeholder"=>"请输入菜单名称"]) ?>
</div>
<div class="layui-form-item layui-col-md8">
<?php echo $form->field($model,'id')->textInput([
"class"=>"layui-input",
"autocomplete"=>"off",
"lay-verify"=>"required",
"placeholder"=>"请输入菜单名称"]) ?>
</div>
<div class="layui-form-item layui-col-md8">
<?php echo $form->field($model,'link')->textInput([
"class"=>"layui-input",
"autocomplete"=>"off",
"lay-verify"=>"required",
"placeholder"=>"请输入链接地址"]) ?>
</div>
<div class="layui-form-item layui-col-md8">
<?php echo $form->field($model,'icon')->textInput([
"class"=>"layui-input",
"autocomplete"=>"off",
"lay-verify"=>"required",
"placeholder"=>"请输入图标"]) ?>
</div>
<div class="layui-form-item layui-col-md8">
<?php echo $form->field($model,'sort')->textInput([
"class"=>"layui-input",
"autocomplete"=>"off",
"lay-verify"=>"required",
"placeholder"=>"请输入图标"]) ?>
</div>
<div class="layui-form-item layui-col-md8">
<div class="layui-input-block">
<?php echo $form->field($model,'isurl')->inline()->radioList(['1'=>'是','0'=>'否']) ?>
</div>
</div>
<div class="layui-form-item layui-col-md8">
<div class="layui-input-block">
<?php echo $form->field($model,'isblank')->inline()->radioList(['1'=>'是','0'=>'否']) ?>
</div>
</div>
<div class="layui-form-item layui-col-md8">
<div class="layui-input-block">
<?php echo $form->field($model,'state')->inline()->radioList(['1'=>'正常','0'=>'禁用']) ?>
</div>
</div>
<div class="layui-form-item layui-col-md8">
<?php echo $form->field($model,'remark')->textArea([
"class"=>"layui-input",
"autocomplete"=>"off",
"lay-verify"=>"required|email",
"placeholder"=>"备注信息"]) ?>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<a onclick="menuAdd();" class="layui-btn" lay-filter="formDemo">立即提交</a>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</div>
<?php ActiveForm::end();?>
小弟请问在座的老师们,更新数据,通过POST提交一个表单,每次都要指定updateAll(['name'=>$this->name,'pid'=>$this->pid,'isurl'=>$this->isurl,......],'{条件....}'),,,,,,,每个字段都要写进updateAll里面,如果我的表单有几十个值,那得写几十个参数~有没有什么办法能一次性修改为表单提交的所有值呢????
最佳答案
-
你使用的已经是
$form->field($model, 'attribute');
的形式了,应该清楚模型更新方式的吧。。。
片段代码如下$model = $this->findModel($id); if($model->load(\Yii::$app->getRequest()->post())) { $model->name = trim($model->name); //... 一些自定义逻辑 $model->save(); //保存 }
可以参考Gii 生成的 CRUD 中 update的源码
共 5 条回复xiaochuanworld 回复于 2017-12-15 15:05 回复可是我如果表单上面,有50多个值,我就得写50多个赋值吗($model->name,$model->id,$model->pid,.............)?有没有好的一次过修改表单的方法?
@xiaochuanworld
$model->load()
已经完成了 赋值操作, 你需要写的 只是一些特殊的过滤判断,比如 片段中的trim
, 你也可以在 Model类中的rules中设定。 建议多看看源码 测试测试xiaochuanworld 回复于 2017-12-15 17:38 回复@Jeen 大感谢!
xiaochuanworld 回复于 2017-12-15 18:18 回复@Jeen 问题又出现了,
if(Yii::$app->request->isPost){ $model=new Sysmenu(); $model->scenario='editadminmenu'; $post=Yii::$app->request->post(); if(!empty($post)){ return $model->editAdminMenu($post); } } ///接受POST数据,调用方法去修改,然后 public function editAdminMenu($data) { Yii::$app->response->format=Response::FORMAT_JSON; $model =$this->findOne($data->id); if($model->load($data)&&$model->validate()){ //$model->name='管理员列表'; $res=(bool)$model->save(); if($res){ return ["code"=>"1","msg"=>"修改成功!"]; }else{ return $this->getErrors(); } }else{ $this->addError('错误','验证失败!'); return $this->getErrors(); } }
首先,
$model =$this->findOne($data->id);
这里获取不到ID的值,然后我强制写为$model =$this->findOne(2);
之后提示我修改成功,可是数据没有变化~~
请问是哪里出错了呢?@xiaochuanworld 首先你需要明确 post 的值有哪些,取不到id 的问题有很多种 1、post表单中没有 2、Sysmenu 中没有配置 id 的过滤规则,即rules中无相关设置 3、其它
另外 修改成功, 但是数据没有变化, 说明值没有变更 或者 赋值失败。
猜测问题出现在 Sysmenu 模型 rules 设置中的可能性比较大。
建议多测试测试吧, 看不到具体代码,猜测沟通起来都比较难菜鸟鼻涕 , xiaochuanworld 觉得很赞
xiaochuanworld
最后登录:2020-09-23
在线时长:20小时15分
- 粉丝2
- 金钱825
- 威望0
- 积分1025