[thinkPHP5项目实战_11]栏目修改
文章栏目105310530
发布时间:2019-12-28 09:30:51

概述

上一篇分享了栏目的循环输出和栏目删除。

如果开发过程中出现了页面不可用,请稍后再试,可以将application文件夹下的config.php文件中的调试模式打开,可以看到代码报错提示信息。

// 应用调试模式
'app_debug' => true,

1.模板和edit方法构建

在admin模块的view文件夹下新建edit.html文件,该模板用于接收点击修改后从数据库中获取的该栏目的信息,这里栏目的信息为cates

[thinkPHP5项目实战_11]栏目修改

<form action="" method="post" id="myform" name="myform" enctype="multipart/form-data">
    <!— ID在数据表中是主键,在form表单中新建一个隐藏的input文本框用于接收和存储栏目的ID,当点击提交时需要用此ID值对该栏目在数据库中的数据进行更新 —>
    <input type="hidden" name="id" value="{$cates.ID}">
    <table class="insert-tab" width="100%">
        <tbody>
            <tr>
                <th width="10%">栏目名称:</th>
                <td>
                    <input class="common-text required" id="catename" name="catename" size="50" value="{$cates.catename}" type="text">
                </td>
            </tr>
            <tr>
                <th>关键词:</th>
                <td>
                    <input class="common-text" name="keywords" size="50" value="{$cates.keywords}" type="text">
                </td>
            </tr>
            <tr>
                <th>栏目类型:</th>
                <td>
                    <!— 使用If条件判断对栏目类型进行判断 —>
                    <input name="type" value="1" type="checkbox" {if condition="$cates.type eq 1" }checked='checked' {/if} /> 留言板</td>
            </tr>
            <tr>
                <th>内容:</th>
                <td>
                    <textarea name="desc" class="common-textarea" id="desc" cols="30" style="width: 98%;" rows="10">{$cates.desc}</textarea>
                </td>
            </tr>
            <tr>
                <th></th>
                <td>
                    <input class="btn btn-primary btn6 mr10" value="提交" type="submit">
                    <input class="btn btn6" οnclick="history.go(-1)" value="返回" type="button">
                </td>
            </tr>
        </tbody>
    </table>
</form>

在Cate控制器中构建edit操作方法取回 :

public function edit()
{
    return $this->fetch();
}

此时点击栏目列表上的跳转会显示cates未定义。

2.修改跳转和传参

在栏目列表上点击修改将该栏目的id传到当前控制器的edit操作方法,使用thinkPHP5助手函数url实现跳转和传参:

可以使用字符串和数组两种传参方式:

<a href="{:url('edit',array('id'=>$vo.ID))}">修改</a>

或者使用字符串拼接

<a href="{:url('edit','id='.$vo.ID)}">修改</a>

3.获取栏目数据

跳转到修改页面后需要将查询的栏目信息渲染到模板上,因此需要从数据库中提取该栏目的信息

使用thinkPHP5提供的助手函数查询数据库信息,并将获取的结果使用assign方法赋值给cates:

public function edit()
{
    //获取修改的信息
    $id=input('id');
    $cates = db('cate')->where('ID',$id)->find();
    $this->assign('cates',$cates);//模板赋值
    return $this->fetch();
}

此时在栏目列表上点击修改可以跳转到修改页面并能获取到该栏目的信息。

4.修改提交验证

修改完成后提交同样需要进行验证,validate下的Cate.php文件:

<?php
namespace app\admin\validate;

use think\Validate;

class Cate extends Validate
{
    //验证规则
    protected $rule = [
        // catename验证,必须,长度不能超过25,名称不能重复
        'catename'  =>  'require|max:25|unique:cate',
    ];

    //验证提示
    protected $message  =   [
        'catename.unique' => '栏目名称不能重复', 
        'catename.max' => '栏目名称不能大于5个字符',
        'catename.require' => '栏目名称必须',

    ];
}

在Cate控制器的edit操作方法添加验证,

验证成功则使用助手函数更新数据库,若栏目没有任何修改则回提示更新栏目失败

public function edit()
{
    //获取修改的信息
    $id=input('id');
    $cates = db('cate')->where('ID',$id)->find();
    $this->assign('cates',$cates);//模板赋值
    //修改后提交
    if(request()->isPost()){
        $data=[
            'ID'=>input('id'),
            'catename'=>input('catename'),
            'keywords'=>input('keywords'),
            'desc'=>input('desc'),
            'type'=>input('type') ? input('type') : 0,
        ];
        //验证
        $validate = \think\Loader::validate('Cate');
        if($validate->check($data)){
            $res = \think\Db::name('cate')->update($data);
            if($res){
                return $this->success('修改栏目成功','lists');
            }else{
                return $this->error('修改栏目失败');
            }
        }else{
            //验证失败输出提示信息
            return $this->error($validate->getError());
        }
    }
    return $this->fetch();
}

5.效果

[thinkPHP5项目实战_11]栏目修改