加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

thinkphp5基础

发布时间:2020-12-14 13:55:46 所属栏目:大数据 来源:网络整理
导读:【thinkphp5框架的目录结构,以及使用框架model 、controler、view的使用,以及错误调试和日志记录 】 ThinkPHP5 在php5.5版本以上”No input file specified“问题解决: public/.htaccess文件中的 RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] 在默认情况

【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

        );
        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

 [
    "cyy" => [
        'cyy' => 1,1)">
        
    ]
];

路由的使用

自定义路由

application/index/controller/Video.php

<?php
namespace appindexcontroller;

class Video  Controller {

     自定义路由
     getVideo() {
        $id = input("param.id");

         http://phptest.com/index/video/getVideo?id=2
        //  => 域名/video/2
        dump($id);
    }
}

application/route.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>
// +----------------------------------------------------------------------
 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+']],1)">
]);

控制器的使用

application/index/controller/Demo.php

<? thinkConfig;
 thinkRequest;

/**
     * 初始化
     * @auth   cyy
     * @return [type] [description]
     */
     _initialize() {
        dump("这是initialize");
    }
     test() {
         数组转json格式返回
        return json(["as" => 1,"cyy" => "test"]);
    }

     hello() {
        var_dump(input("param."return "index-index-hello";
    }

     控制器-跳转
     abc() {
        $id = input("param.id","intval");
        if($id == 1) {
            $this->success("操作成功","admin/index/index");
        }elseif($id == 2$this->error("操作失败");
        }    

    }

     控制器-重定向
     ef() {
        $this->redirect("hello",["id" => 1,"ms" => 123]);
        redirect("https://baidu.com");
    }

     控制器-请求
     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"));    }
}

application/index/controller/Base.php

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

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

application/database.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>
// +----------------------------------------------------------------------

 [
     数据库类型
    'type'            => 'mysql',1)"> 服务器地址
    'hostname'        => 'localhost',1)"> 数据库名
    'database'        => 'test',1)"> 用户名
    'username'        => 'root',1)"> 密码
    'password'        => '123456',1)"> 端口
    'hostport'        => '3306',1)"> 连接dsn
    'dsn'             => '',1)"> 数据库连接参数
    'params'          => [],1)"> 数据库编码默认采用utf8
    'charset'         => 'utf8',1)"> 数据库表前缀
    'prefix'          => 'test_',1)"> 数据库调试模式
    'debug'           => true,1)"> 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    'deploy'          => 0,1)"> 数据库读写是否分离 主从式有效
    'rw_separate'     => false,1)"> 读写分离后 主服务器数量
    'master_num'      => 1,1)"> 指定从服务器序号
    'slave_no'        => '',1)"> 是否严格检查字段是否存在
    'fields_strict'   =>  数据集返回类型
    'resultset_type'  => 'array',1)"> 自动写入时间戳字段
    'auto_timestamp'  =>  时间字段取出后的默认时间格式
   
    'datetime_format'  =>  是否需要进行SQL性能分析
    'sql_explain'     => 
];

模型
application/common/model/Base.php

<?php
namespace appcommonmodel;
 thinkModel;
 Model{

    protected $autoWriteTimestamp = true;
    protected $createTime = 'create_a_time';
    *
     * 新增逻辑
     * @auth  singwa
     * @param array  $data [description]
     * @return  int
     function add($data = []) {
        if(empty($data) || !is_array($data)) {
            return false;
        }

        $this->allowField(true)->save($this->id;
    }
}

application/common/model/Video.php

<?php
namespace appcommonmodel;

 Base{

    *
     * 定义一个关联 1-1
     * @auth   singwa
     * @return [type] [description]
      videoFile() {
        $this->hasOne("VideoFile");  video_id
    }
}

application/common/model/VideoFile.php

<?class VideoFile  Base{
    
}

application/index/controller/Video.php

<? thinkDb;
use appcommonmodelVideo as VideoModel;
 Base {

     数据库query查询
    function mysql() {
        $video = Db::query("select * from test_video where id=2"$video);
    }

     模型的使用
     model() {
         获取id为2的数据
        $video = VideoModel::get(2dump($video);

        $video = new VideoModel();
        $video->title = "cyy-test";
        $video->description = "cyy-test-description1";
        dump($video->save());//int 1 插入数据保存成功

         [
            "title" => "cyy-test3",1)">
        ];
        dump($video->save($data));//dump($video->save());//int 1 插入数据保存成功

     add() {
        $video = model("Video");

         [
            "title" => "cyy-test6","mpt" => 1,1)">
        ];
        
        $id = $video->add($id);string '6' (length=1)

     select() {
        $conditon = [
            "status" => 1,1)">
        ];

        $videos = model("Video")->where($conditon)->select();
        $videos = model("Video")
            ->where($conditon)
            ->limit(1)
            ->order("id","desc")
            ->select();
        dump($videos
     update() {
        $updataData = [
            "title" => "cyy你好鸭"
        ];

        $whereCondition = [
            "id" => 1,1)">$res = model("Video")->allowField(true)->save($updataData,$whereCondition);
        //echo model("Video")->getLastSql(); //作用非常重要
        //dump($res);

        model("Video")->where($whereCondition)
            ->update($updataDataecho model("Video")->getLastSql();UPDATE `test_video` SET `title`='cyy你好鸭' WHERE `id` = 1    

     delete() {

         这种场景是 真正的删除
        $res = model("Video")->where("id",">",18)->delete();
        echo model("Video")->getLastSql();
        dump($res);*/

         在实际工作当中 我们的删除一般不直接删除, 所以一般假删除
        //  修改status => -1
        model("Video")->where(["id" => 6])
            ->update(["status" => -1UPDATE `test_video` SET `status`=-1 WHERE `id` = 6
    }
一对一关联
     correlation() {
        $video = model("Video")->find(1halt($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->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

<? 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());

        $this->fetch("",1)"> [
            "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']}
    {$names.name}
    {$video->title}
    {$video.title}
    {$video:title}

    {eq name="name",value="cyy1"}
        cyy您好1111

    {else /}
        不是cyy
    {/eq}

    {$Request.get.id}

    {$video->create_time|date="Y-m-d H",###}br
    {$video->status|status}

    {volist name="videos" id="vo"}
        {$vo.id} --------  {$vo.title} br / 

    {/volist}

</>

日志定位

application/index/controller/Demo.php

<? thinkRequest;
use thinkLog; 日志定位

 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=45log ] phptest.com/index/demo/logtest?mst=1&mp=45 [运行时间:0.233506s][吞吐率:4.28req/s] [内存消耗:1,571.42kb] [文件加载:40]
[ info ] [ LANG ] D:phpstudy_proWWWphptestthinkphplangzh-cn.php
[ info ] [ ROUTE ] array (
  'type' => 'module','module' => 
   (
    0 => 'index',1 => 'demo',2 => 'logtest',1)">
  ),1)">
)
[ info ] [ HEADER ]  (
  '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',1)">
)
[ info ] [ PARAM ]  (
  'mst' => '1','mp' => '45',1)">
)
[ info ] [ RUN ] appindexcontrollerDemo->logtest[ D:phpstudy_proWWWphptestapplicationindexcontrollerDemo.php ]
[ info ] [ LOG ] INIT File

trace调试

application/config.php

 应用调试模式
    'app_debug'              =>  应用Trace
    'app_trace'              => 
<? logtest() {

        $mrs = model("Video")->where(["id" => 2])->find();
        echo model("Video")->getLastSql();

        ;
    }
}

?

?变量调试

application/index/controller/Demo.php

<? prinr_r();
        // var_dump();
        // 类似断点调试
        dump(input("param."));
        halt(input("param."));   dump()  exit;

        ;
    }
}

性能调试

application/index/controller/Demo.php

<? 日志定位
use thinkDebug;性能调试

 logtest() {
        
        debug("start1");--开始标记
        echo model("Video")->getLastSql();
        
        debug("end1");--结束标记
        dump(debug("start1","end1",4));string '0.0241'
        dump(debug("start1","m"));string '1.2 MB'
        //第三个参数如果是数字代表记录时间;如果是'm'代表记录内存使用

        ;
    }
}

sql调试

application/index/controller/Demo.php

<? logtest() {
        
        ;
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读