2017-12-14 16:03:36 2917次浏览 2条回答 0 悬赏 35 金钱
<?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里面,如果我的表单有几十个值,那得写几十个参数~有没有什么办法能一次性修改为表单提交的所有值呢????

最佳答案

  • Jeen 发布于 2017-12-15 09:51 举报

    你使用的已经是
    $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 条回复
    回复于 2017-12-15 15:05 回复

    可是我如果表单上面,有50多个值,我就得写50多个赋值吗($model->name,$model->id,$model->pid,.............)?有没有好的一次过修改表单的方法?

    回复于 2017-12-15 16:01 回复

    $model->load() 已经完成了 赋值操作, 你需要写的 只是一些特殊的过滤判断,比如 片段中的 trim, 你也可以在 Model类中的rules中设定。 建议多看看源码 测试测试

    回复于 2017-12-15 17:38 回复

    大感谢!

    回复于 2017-12-15 18:18 回复

    问题又出现了,

    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);
    之后提示我修改成功,可是数据没有变化~~
    请问是哪里出错了呢?

    回复于 2017-12-15 18:29 回复

    首先你需要明确 post 的值有哪些,取不到id 的问题有很多种 1、post表单中没有 2、Sysmenu 中没有配置 id 的过滤规则,即rules中无相关设置 3、其它
    另外 修改成功, 但是数据没有变化, 说明值没有变更 或者 赋值失败。
    猜测问题出现在 Sysmenu 模型 rules 设置中的可能性比较大。
    建议多测试测试吧, 看不到具体代码,猜测沟通起来都比较难

您需要登录后才可以回答。登录 | 立即注册
xiaochuanworld
经理

xiaochuanworld

注册时间:2017-08-27
最后登录:2020-09-23
在线时长:20小时15分
  • 粉丝2
  • 金钱825
  • 威望0
  • 积分1025

热门问题