zoukankan      html  css  js  c++  java
  • thinkphp5基础

    【thinkphp5框架的目录结构,以及使用框架model 、controler、view的使用,以及错误调试和日志记录

    ThinkPHP5 在php5.5版本以上”No input file specified“问题解决:

      public/.htaccess文件中的

      RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

      在默认情况下会导致No input file specified.

      修改成

      RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]

      问题解决


    配置文件的使用

    application/index.controller/Demo.php

    <?php
    namespace appindexcontroller;
    use thinkConfig;
    
    class Demo extends Base{
        // 配置文件的使用
        public function config() {
            // 默认一页显示15条
            $config = Config::get("paginate");
            dump($config);//15
    
            $config = config("paginate.type");
            dump(config("?paginate"));//boolean true
    
            $config = config("paginate.type");
            dump(config("?paginate111"));//boolean false
    
            dump(Config::has("paginate"));//boolean true
    
            dump(config("cyy"));
            // array (size=1)
              // cyy' => int 1
      
            dump(config("redis.host"));//string '127.0.0.1'
        }
    }

    application/extra/redis.php

    <?php
    // 配置文件的使用
    return [
        "host" => "127.0.0.1",
    ];

    application/index/config/php

    <?php
    
    // 配置文件的使用
    return [
        "cyy" => [
            'cyy' => 1,
            
        ]
    ];

    路由的使用

    自定义路由

    application/index/controller/Video.php

    <?php
    namespace appindexcontroller;
    
    class Video extends Controller {
    
        // 自定义路由
        public function getVideo() {
            $id = input("param.id");
    
            // http://phptest.com/index/video/getVideo?id=2
            //  => 域名/video/2
            dump($id);
        }
    }

    application/route.php

    <?php
    // +----------------------------------------------------------------------
    // | ThinkPHP [ WE CAN DO IT JUST THINK ]
    // +----------------------------------------------------------------------
    // | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
    // +----------------------------------------------------------------------
    // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
    // +----------------------------------------------------------------------
    // | Author: liu21st <liu21st@gmail.com>
    // +----------------------------------------------------------------------
    use thinkRoute;
    
    // 自定义路由 域名/video/2
    // Route::rule("video/:id", "index/Video/getVideo");
    //Route::get("video/:id", "index/Video/getVideo");// 定义Get请求路由
    //Route::post("video/:id", "index/Video/getVideo");// 定义Post请求路由
    
    // 组合写法
    Route::get([
        'video/:id' => ["index/Video/getVideo", [], ['id' => 'd+']],
    ]);

    控制器的使用

    application/index/controller/Demo.php

    <?php
    namespace appindexcontroller;
    use thinkConfig;
    use thinkRequest;
    
    class Demo extends Base{
        /**
         * 初始化
         * @auth   cyy
         * @return [type] [description]
         */
        public function _initialize() {
            dump("这是initialize");
        }
        public function test() {
            // 数组转json格式返回
            return json(["as" => 1, "cyy" => "test"]);
        }
    
        public function hello() {
            var_dump(input("param."));
            return "index-index-hello";
        }
    
        // 控制器-跳转
        public function abc() {
            $id = input("param.id", 0, "intval");
            if($id == 1) {
                $this->success("操作成功", "admin/index/index");
            }elseif($id == 2) {
                $this->error("操作失败");
            }    
    
        }
    
        // 控制器-重定向
        public function ef() {
            $this->redirect("hello", ["id" => 1, "ms" => 123]);
            //redirect("https://baidu.com");
        }
    
        // 控制器-请求
        public function requestData() {
            $request =  Request::instance();
            //访问http://phptest.com/index/demo/requestData?ids=2
            dump(request()->isPost());//boolean false
            dump(input("?get.ids"));//boolean true
            dump(request()->has("ids", "get"));//boolean true
        }
    }

    application/index/controller/Base.php

    <?php
    namespace appindexcontroller;
    use thinkController;
    class Base extends Controller {
    
        /**
         * 空操作
         * @auth   singwa
         * @param  [type] $name [description]
         * @return [type]       [description]
         */
        // 控制器-空操作
        public function _empty($name) {
            // todo
            return $name;
        }
    }

    数据库配置与model层数据操作

    application/database.php

    <?php
    // +----------------------------------------------------------------------
    // | ThinkPHP [ WE CAN DO IT JUST THINK ]
    // +----------------------------------------------------------------------
    // | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
    // +----------------------------------------------------------------------
    // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
    // +----------------------------------------------------------------------
    // | Author: liu21st <liu21st@gmail.com>
    // +----------------------------------------------------------------------
    
    return [
        // 数据库类型
        'type'            => 'mysql',
        // 服务器地址
        'hostname'        => 'localhost',
        // 数据库名
        'database'        => 'test',
        // 用户名
        'username'        => 'root',
        // 密码
        'password'        => '123456',
        // 端口
        'hostport'        => '3306',
        // 连接dsn
        'dsn'             => '',
        // 数据库连接参数
        'params'          => [],
        // 数据库编码默认采用utf8
        'charset'         => 'utf8',
        // 数据库表前缀
        'prefix'          => 'test_',
        // 数据库调试模式
        'debug'           => true,
        // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
        'deploy'          => 0,
        // 数据库读写是否分离 主从式有效
        'rw_separate'     => false,
        // 读写分离后 主服务器数量
        'master_num'      => 1,
        // 指定从服务器序号
        'slave_no'        => '',
        // 是否严格检查字段是否存在
        'fields_strict'   => true,
        // 数据集返回类型
        'resultset_type'  => 'array',
        // 自动写入时间戳字段
        'auto_timestamp'  => false,
        // 时间字段取出后的默认时间格式
       
        'datetime_format'  => false,
        // 是否需要进行SQL性能分析
        'sql_explain'     => false,
    ];

    模型
    application/common/model/Base.php

    <?php
    namespace appcommonmodel;
    use thinkModel;
    class Base extends Model{
    
        protected $autoWriteTimestamp = true;
        //protected $createTime = 'create_a_time';
        /**
         * 新增逻辑
         * @auth  singwa
         * @param array  $data [description]
         * @return  int
         */
        public function add($data = []) {
            if(empty($data) || !is_array($data)) {
                return false;
            }
    
            $this->allowField(true)->save($data);
            return $this->id;
        }
    }

    application/common/model/Video.php

    <?php
    namespace appcommonmodel;
    
    class Video extends Base{
    
        /**
         * 定义一个关联 1-1
         * @auth   singwa
         * @return [type] [description]
         */
        public function videoFile() {
            return $this->hasOne("VideoFile"); // video_id
        }
    }

    application/common/model/VideoFile.php

    <?php
    namespace appcommonmodel;
    
    class VideoFile extends Base{
        
    }

    application/index/controller/Video.php

    <?php
    namespace appindexcontroller;
    use thinkDb;
    use appcommonmodelVideo as VideoModel;
    class Video extends Base {
    
        // 数据库query查询
        public function mysql() {
            $video = Db::query("select * from test_video where id=2");
            dump($video);
        }
    
        // 模型的使用
        public function model() {
            // 获取id为2的数据
            $video = VideoModel::get(2);
            //dump($video);
    
            $video = new VideoModel();
            $video->title = "cyy-test";
            $video->description = "cyy-test-description1";
            //dump($video->save());//int 1 插入数据保存成功
    
            $data = [
                "title" => "cyy-test3",
            ];
            //dump($video->save($data));//dump($video->save());//int 1 插入数据保存成功
        }
    
        //
        public function add() {
            $video = model("Video");
    
            $data = [
                "title" => "cyy-test6",
                "mpt" => 1,
            ];
            
            $id = $video->add($data);
            dump($id);//string '6' (length=1)
        }
    
        //
        public function select() {
            $conditon = [
                "status" => 1,
            ];
    
            //$videos = model("Video")->where($conditon)->select();
            $videos = model("Video")
                ->where($conditon)
                ->limit(1)
                ->order("id", "desc")
                ->select();
            dump($videos);
        }
    
        //
        public function update() {
            $updataData = [
                "title" => "cyy你好鸭"
            ];
    
            $whereCondition = [
                "id" => 1,
            ];
    
            //$res = model("Video")->allowField(true)->save($updataData, $whereCondition);
            //echo model("Video")->getLastSql(); //作用非常重要
            //dump($res);
    
            model("Video")->where($whereCondition)
                ->update($updataData);
            echo model("Video")->getLastSql();//UPDATE `test_video` SET `title`='cyy你好鸭' WHERE `id` = 1    
        }
    
        //
        public function delete() {
    
            // 这种场景是 真正的删除
            /*$res = model("Video")->where("id", ">", 18)->delete();
            echo model("Video")->getLastSql();
            dump($res);*/
    
            // 在实际工作当中 我们的删除一般不直接删除, 所以一般假删除
            //  修改status => -1
            model("Video")->where(["id" => 6])
                ->update(["status" => -1]);
            echo model("Video")->getLastSql();//UPDATE `test_video` SET `status`=-1 WHERE `id` = 6
        }
    //一对一关联
        public function correlation() {
            $video = model("Video")->find(1);
            //halt($video->videoFile->file);    
            //dump(VideoModel::hasWhere("videoFile", ["video_id" => 1])->find());//string 'file1' (length=5)
            
            // 1vs1 插入
            model("Video")->title = "1VS1-add-test";
            model("Video")->image = "1vs1.gif";
    
            model("VideoFile")->file = "1vs1.flv";
            model("VideoFile")->status = 1;
             model("Video")->VideoFile = model("VideoFile");
    
             //dump(model("Video")->together("VideoFile")->save());
    
             // 1vs1 更新操作
             $video = model("Video")->find(1);
             $video->title = "1vs1-update-test";
             $video->videoFile->file = "1vs1-update.mp4";
             //dump($video->together("videoFile")->save());
    
             // 1 vs N  查询
             //dump(model("Video")->videoFile()->where("video_id", 1)->select());
             //dump(VideoModel::hasWhere('videoFile', ["video_id" => 1])->select());    
        }
    }

    视图层

     application/index/controller/Video.php

    <?php
    namespace appindexcontroller;
    use thinkDb;
    use appcommonmodelVideo as VideoModel;
    class Video extends Base {
    
        public function demo() {
    
            $video = model("Video")->where(["id" => 1])->find();
            $videos = model("Video")->where("id", ">", 1)->select();
            
            // halt($video->update_time);//halt=dump+exit
            // halt($video->update_time);
            // halt($video->toArray());
    
            return $this->fetch("", [
                "name" => "cyy",
                "names" => ["name" => "hello , cyy!"],
                "video" => $video,
                "videos" => $videos,
                "id" => input("param.id")
            ]);
        }
    
    }

    application/index/view/video/demo.html

    <html>
    <body>
        {$name}<br />
        {$names['name']}<br />
        {$names.name}<br />
        {$video->title}<br />
        {$video.title}<br />
        {$video:title}<br />
    
        {eq name="name", value="cyy1"}
            cyy您好1111<br />
    
        {else /}
            不是cyy<br />
        {/eq}
    
        {$Request.get.id}<br />
    
        {$video->create_time|date="Y-m-d H", ###}<br/>
        {$video->status|status}<br/>
    
        {volist name="videos" id="vo"}
            {$vo.id} --------  {$vo.title} <br / >
    
        {/volist}
    
    </body>
    </html>

    日志定位

    application/index/controller/Demo.php

    <?php
    namespace appindexcontroller;
    use thinkConfig;
    use thinkRequest;
    use thinkLog;// 日志定位
    
    class Demo extends Base{
    
        public function logtest() {
    
            Log::write("testlog".json_encode(input("param.")));
            return 1;
        }
    }

    runtime/log下的当天文件夹里的.log文件

    [ 2020-01-17T13:02:47+08:00 ] 127.0.0.1 127.0.0.1 GET /index/demo/logtest?mst=1&mp=45
    [ log ] phptest.com/index/demo/logtest?mst=1&mp=45 [运行时间:0.022899s][吞吐率:43.67req/s] [内存消耗:1,372.95kb] [文件加载:33]
    [ log ] testlog{"mst":"1","mp":"45"}
    
    [ 2020-01-17T13:02:47+08:00 ] 127.0.0.1 127.0.0.1 GET /index/demo/logtest?mst=1&mp=45
    [ log ] phptest.com/index/demo/logtest?mst=1&mp=45 [运行时间:0.233506s][吞吐率:4.28req/s] [内存消耗:1,571.42kb] [文件加载:40]
    [ info ] [ LANG ] D:phpstudy_proWWWphptest	hinkphplangzh-cn.php
    [ info ] [ ROUTE ] array (
      'type' => 'module',
      'module' => 
      array (
        0 => 'index',
        1 => 'demo',
        2 => 'logtest',
      ),
    )
    [ info ] [ HEADER ] array (
      'cookie' => 'thinkphp_show_page_trace=0|0; pgv_pvi=98915328; pgv_si=s6064574464; thinkphp_show_page_trace=0|0',
      'accept-language' => 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
      'accept-encoding' => 'gzip, deflate',
      'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
      'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36',
      'upgrade-insecure-requests' => '1',
      'cache-control' => 'no-cache',
      'pragma' => 'no-cache',
      'connection' => 'close',
      'host' => 'phptest.com',
    )
    [ info ] [ PARAM ] array (
      'mst' => '1',
      'mp' => '45',
    )
    [ info ] [ RUN ] appindexcontrollerDemo->logtest[ D:phpstudy_proWWWphptestapplicationindexcontrollerDemo.php ]
    [ info ] [ LOG ] INIT File

    trace调试

    application/config.php

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

    application/index/controller/Demo.php

    <?php
    namespace appindexcontroller;
    use thinkConfig;
    use thinkRequest;
    use thinkLog;// 日志定位
    
    class Demo extends Base{
    
        public function logtest() {
    
            $mrs = model("Video")->where(["id" => 2])->find();
            echo model("Video")->getLastSql();
    
            return 1;
        }
    }

     变量调试

    application/index/controller/Demo.php

    <?php
    namespace appindexcontroller;
    use thinkConfig;
    use thinkRequest;
    use thinkLog;// 日志定位
    
    class Demo extends Base{
    
        public function logtest() {
    
            // prinr_r();
            // var_dump();
            // 类似断点调试
            dump(input("param."));
            halt(input("param.")); //  dump()  exit;
    
            return 1;
        }
    }

    性能调试

    application/index/controller/Demo.php

    <?php
    namespace appindexcontroller;
    use thinkConfig;
    use thinkRequest;
    use thinkLog;// 日志定位
    use thinkDebug;//性能调试
    
    class Demo extends Base{
    
        public function logtest() {
            
            debug("start1");//--开始标记
            $mrs = model("Video")->where(["id" => 2])->find();
            //echo model("Video")->getLastSql();
            
            debug("end1");//--结束标记
            dump(debug("start1", "end1", 4));//string '0.0241'
            dump(debug("start1", "end1", "m"));//string '1.2 MB'
            //第三个参数如果是数字代表记录时间;如果是'm'代表记录内存使用
    
            return 1;
        }
    }

    sql调试

    application/index/controller/Demo.php

    <?php
    namespace appindexcontroller;
    use thinkConfig;
    use thinkRequest;
    use thinkLog;// 日志定位
    use thinkDebug;//性能调试
    
    class Demo extends Base{
    
        public function logtest() {
            
            $mrs = model("Video")->where(["id" => 2])->find();
            echo model("Video")->getLastSql();
    
            return 1;
        }
    }
  • 相关阅读:
    java 文件下载遇到的数个坑
    table标签 在谷歌和ie浏览器下不同的表现效果
    Java Day 19
    Java Day 18
    Java Day 17
    Java Day 16
    Java Day 15
    Java Day 14
    Java Day 13
    Java Day 12
  • 原文地址:https://www.cnblogs.com/chenyingying0/p/12205247.html
Copyright © 2011-2022 走看看