thinkphp5留言板

一、项目目的

      为了提高新手对mvc模式的认识、加深thinkphp5知识的掌握程度,本文通过留言板示例进行展示。

二、项目需求

   用户注册、登录

   发表留言

   删除本人留言

   查看留言

三、数据表设计

       分析项目需求,一个用户可以有多条留言,发现需要用户表和留言表两张表即可,需求中包含了用户注册、登录,所以用户表需要有账号、密码字段。发表留言以及删除留言可以确定留言表需要留言内容、用户id字段。

用户表:

thinkphp5留言板_第1张图片

userId主键自增,createAt表示用户注册时间

留言表:

thinkphp5留言板_第2张图片

messageId主键自增,creatAt留言时间。

四、模块设计

      本项目功能简单,所以只需要一个Home模块,控制器及其方法如下:

thinkphp5留言板_第3张图片

五、代码实现

5.1编写模型

     创建Message模型,新建application\Home\model\Message.php,代码如下:

 

创建Users模型,新建application\Home\model\Users.php,代码如下:

5.2编写控制器

创建用户控制器,编辑application\Home\controller\Login.php,代码如下:

isPost()判断是否接受到了post请求,如果有就执行下面的代码 */
        if (request()->isPost()) {
            $date = input('post.');
            $username = $date['username'];
            $password = $date['password'];
            $user = new Users;
            $res = $user->where(['name'=>$username,'password'=>$password])->find();
            if ($res) {
                /* 验证成功,session保存登录信息。当我们跳转到其他页面时可以查询是否有登录信息
                如果没有就需要登录再进行操作,这也是最简单的权限认证,否则只要在浏览器中输入
                正确的地址任何人都可以操作*/
                session('userId', $res['userId']);
                session('username', $res['name']);
                /*登录成功,跳转到当前模块,当前控制器的messagelst方法*/
                $this->success('登录成功!', url('messagelst'));
            } else {
                /*登录失败,返回上一页*/
                $this->error('账号或密码不正确!');
            }
        }
        /*
        当输入Home/login/login访问时并没有POST请求,所有直接就执行 return view(),跳转到了login.html,这时我们输入
        账号密码点击登录,表单action="{:url('login')}" method="POST",我们将填写的数据又发送回来,这时才进行下面的代码。
        */
        /*模板定位方法之一*/
        return $this->fetch();
        /*模板定位方法之二*/
        /*return view();*/
        /*方法二选一,不输入参数代表当前模块当前控制器名视图下的当前方法名.html*/
        /*所有这里模板定位到了Home模块下View文件夹下的login文件夹下的login.html*/
        /*所有建议在创建模板的时候一定要命名规范,而且存放在合理的位置*/
    }

    /**
     * 显示留言
     */
    public function messagelst() {
        /*join方法关联user表和message表进行查询数据,这样两张表的字段都能被查询出来
        具体请查看官方文档
        */
        $list=Db::table('users')
            ->alias('user')
            ->join('message message','user.userId = message.userId')
            /*paginate()方法是查询并分页,参数代表每页显示的留言条数*/
            ->paginate(3);
        $this->assign('list',$list);
        /*模板定位的一个方法,这里定位到了当前模块home下view文件夹下的messages文件夹的messages.html*/
        return $this->fetch('message/messagelst');
    }

    /**
     * 用户注册
     */
    public function register(){
        if(request()->isPost()) {
            $username = input('post.username');
            $password = input('post.password');
            $repassword = input('post.repassword');
            if ($password != $repassword) {
                $this->error('两次输入的密码不一致');
            }
            $user = new Users;
            $res = $user->where('name',$username)->find();
            if ($res) {
                $this->error('用户名已存在');
            } else {
                /*将新增用户数据保存到数据库*/
                $user->data([
                    'name' => $username,
                    'password' => $password,
                    'createdAt' => time(),      /*time()获取当前时间的时间戳*/
                ]);
                $ret = $user->save();
                if ($ret > 0) {
                    /*跳转到当面模块当前控制器下的login方法*/
                    $this->success('注册成功!', url('login'));
                }
            }
        }
        /*定位到当前模块下的view文件夹下的login文件下register.html*/
           return view('login/register');
        }
        /**
         * 退出登录并销毁登录上保存的用户信息
         */
        public function loginout(){
            session(null);
            $this->success('退出系统成功',url('login'));
        }
}


创建留言控制器,编辑application\Home\controller\Messages.php,代码如下:

error('请登录后操作',url('Login/login'));
        }
    }
    /**
     * 保存用户留言
     */
    public function do_save(){
        /*调用checklogin方法检查是否登录,没有登录不允许留言*/
        $this->checklogin();
        $data = input('post.');
        $content = $data['words'];
        if(empty($content)){
            $this->error('留言不能为空');
        }
        else if(mb_strlen($content,'utf-8') > 100){
            $this->error('留言内容最多100字');
        }
        else{
            /*获取当前登录用户的id号*/
            $userId = session('userId');
            $message =new Message;
            $res = $message->save([
                'userId'=>$userId,
                'content'=>$content,
                'creatAt'=>time(),
            ]);
            if($res) {
                $this->success('评论成功!',url('Login/messagelst'));
            }else{
                $this->error('评论失败');
            }
        }
    }
    /**
     * 删除留言
     */
    public function delete(){
        $request=Request::instance();
        $id=$request->param('messageId'); /*获取传递的参数messageid*/
        $result=Db::table('message')->delete($id);
        if( $result>0){
            $this->success('删除成功!',url('login/messagelst'));
        }
        else{
            $this->error("删除失败");
        }
    }
}

 

 

5.3前端页面

     登录页面,创建application\Home\view\login\login.html,代码如下:




   
    用户登录



   
       
           
       
       
           
           
       
       
           
           
       
       
           
       
       
用户登录
用户名
密码

                          
                注册

   

注册页面,创建application\Home\view\login\register.html,代码如下:




   
    用户注册


   


   
       
           
       
       
           
           
       
       
           
           
       
       
           
           
       
       
           
       
   
用户注册
用户名
密码
确认密码

                返回


留言及显示页面,创建application\Home\view\message\messagelst.html,代码如下:




   
    留言板



   
       
           
       
       
           
       
       
           
           
           
       
   
留言板

               
           
退出登录


留言列表


{volist name='list' id='infor'}
   
       
           
           
       
       
           
           
       
       
           
           
       
   
留言者:
                {$infor.name}
                {eq name="Think.session.userId" value="$infor.userId"}
                删除
                {/eq}
           
留言内容:{$infor.content}
留言时间:{$infor.creatAt|date='Y-m-d H:i:s',###}

{/volist}

{$list->render()}

 

六、运行效果
6.1登录界面
thinkphp5留言板_第4张图片
6.2注册界面
thinkphp5留言板_第5张图片
6.3留言界面
thinkphp5留言板_第6张图片
thinkphp5留言板_第7张图片


七、项目总结
       至此,我们简易的留言板项目就完成了。留言板项目麻雀虽小,五脏俱全,是典型的入门级案列。学习完本次项目相信你对tp5有了进一步的了解,对mvc模式也有初步的体验,希望读者好好掌握。

你可能感兴趣的:(thinkphp5)