美文网首页
thinkphp 开发留言板

thinkphp 开发留言板

作者: 萍水间人 | 来源:发表于2020-02-13 16:56 被阅读0次

    看到女朋友一直在写留言板,然后就把她的前端页面都搬过来了,用tp二次开发了一下

    thinkphp的文档来回看了几次了,还是要结合实际开发才能更好地掌握下来

    路由

    路由是我一开始折腾最多的,而且thinkphp每个版本的路由文件位置还不一样

    为什么一开始就先搞路由呢,首先是路由在tp的开发文档中靠前,并且路由也相当于是一个大纲了,把这些定下来之后就方便后续的跳转了

    路由配置文件

    Route::get('think', function () {
        return 'hello,ThinkPHP5!';
    });
    
    //Route::get('hello/:name', 'index/hello');
    
     Route::get('/', 'index/index');
    
    Route::post('login', 'login/login');  //不用带 /
    
    Route::get('home', 'index/home'); //添加留言的主页面
    
    Route::post('addMsg', 'Message/addMsg');
    
    //Route::miss('/');
    
    Route::get('delMsg/:id', 'Message/delMsg');
    
    Route::get('mod/:id', 'index/modiMsg');
    Route::post("modiMsg/:id", 'Message/modiMsg');
    

    路由配置好之后,将网站的根目录设置在 public下,然后在该目录下添加一个.htaccess 文件

    这是为了隐藏入口文件,将 index.php 隐藏掉,方便直接使用 localhost 来访问

    <IfModule mod_rewrite.c>
      Options +FollowSymlinks -Multiviews
      RewriteEngine On
    
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
    </IfModule>
    

    首页

    首页需要将数据库中存储的留言读取出来,然后呈现到页面上

    为了方便,我用index模块下的index控制器来负责呈现页面的操作
    结合之前的路由配置, / 路由被映射到 index/index 也就是 index控制器下的index方法

        public function index()
        {
            $res = Db::connect()->table('content')->select();
            $this->assign('res', $res);
            if (Session::has("username")) {
            //如果已经登陆
            $username = Session::get("username");
            $this->assign("username", $username);
        }
            return $this->fetch('index');
        }
    

    建立数据库连接,取出数据之后直接将其传递给 index.html

        <div class="card" style="text-align: center">
            <?php
           foreach($res as $key => $value) {
            ?>
                <div class="header">
                    <p>
                        <?php
                        echo $res[$key]['username'], "&nbsp;&nbsp;发布时间: ", $res[$key]['date_time'], "&nbsp;&nbsp;";
                        if (isset($username)) {
                            ?>
                        <a href="/mod/<?php echo $res[$key]['id']?>">修改留言</a>
                        <a href="/delMsg/<?php echo $res[$key]['id']?>">删除留言</a>
                            <?php
                        }
                        ?>
                    </p>
                </div>
                <div class="container">
                    <?php
                        echo $res[$key]['messages'];
                    ?>
                </div>
            <?php 
        } 
        ?>
    

    登陆页面

    用户会点击首页的添加留言,这里的逻辑应该是要跳转到添加留言的页面的,也就是 /home 路由

    但是要校验是否登陆,

        public function home()
        {
            //如果已经登陆了,就直接跳转到留言页面
            if($this->login->checkLogin()){
                return $this->fetch("addMsg");
            }else{
                //否则跳转到登陆页面
                return $this->fetch("login");
            }
        }
    

    没有登陆返回的就是登陆的页面了

    登陆功能的实现:

    新建了一个 Login 的控制器,

        public function login()
        {
            $username = $this->request->param("username");
            $password = $this->request->param("password");
    
            $res = Db::connect()->table("user")->where("username", $username)->find();
            if($res['password'] !== md5($password)){
                $this->error("密码错误");
            }
            $auth = md5($res['username'] . $res['password'] . $this->salt) . ":" . $res['id'];
            Session::set("username", $username);
            Session::set("auth", $auth);
            $this->success("登陆成功!", "/home");
        }
    

    从用户的表单中获取到用户名和密码进行校验,如果密码错误则弹出提示信息,如果密码正确则跳转到 /home 路由

    添加留言

    这里的表单是向 Message 控制器的 addMsg 方法发送数据

        public function addMsg()
        {
            //接收发送过来的留言
            $messages = $this->request->param("messages");
            $username = \session("username"); //使用助手函数
            $date_time = date("Y-m-d H:i:s");
    
            $data = ['username' => $username, 'messages' => $messages, 'date_time' => $date_time];
            $res = Db::name('content')->insert($data);
            if ($res) {
                $this->success("添加成功", "/");
            }
        }
    

    添加成功则返回到首页

    删除留言

    登录之后,结合之前index控制器下的index方法的验证,此时的首页

    这个只需要向 Message 类的 delMsg 方法发送请求即可

        public function delMsg($id)
        {
            $res = Db::table("content")->delete($id);
            if ($res) {
                $this->success("删除成功", "/");
            } else {
                $this->error("删除失败");
            }
        }
    

    修改留言

    用户点击修改留言,这种情况下我觉得我设计的比较冗余,

    Route::get('mod/:id', 'index/modiMsg');
    

    请求会发送到 index 控制器下的 modiMsg 方法

    取出数据库中原来的留言,然后返回一个修改留言的页面

        public function modiMsg($id)
        {
            $res = Db::connect()->table("content")->where("id", $id)->find();
            $this->assign("id", $id);
            $this->assign("messages", $res['messages']);
            return $this->fetch("modiMsg");
        }
    

    填写好表单之后,向 Message 控制器下的 modiMsg 方法发送请求

        public function modiMsg($id)
        {
            $new_messages = $this->request->param("new_messages");
            $date_time = date("Y-m-d H:i:s");
            $res = Db::name('content')->where('id', $id)->update(['messages' => $new_messages, 'date_time' => $date_time]);
            if ($res) {
                $this->success("更新成功", "/");
            }
        }
    

    ok基本的逻辑就是这些了,在编写代码的过程中还是遇到了一些坑的,最大的坑就是路由了,主要还是对于框架的不熟悉导致的

    相关文章

      网友评论

          本文标题:thinkphp 开发留言板

          本文链接:https://www.haomeiwen.com/subject/wyqjfhtx.html