TP6安装+数据库+模型+视图赋值+等待其他补充都是一些干货

教程转至PHP中文网 还是值得分享的干货 环境要求 PHP7.1 + 本人用PHP7.2 通过composer
Composer具体使将composer设置全局的
到项目目录使用composer命令来下载tp6的源码
命令 composer create-project topthink/think tp6 6.0.*-dev
tp6是项目文件夹
6.0.*-dev是指定下载的版本号
composer require topthink/think-multi-app 多应用模式(这个浪费很长时间没说明)
composer require topthink/think-view模板引擎安装 (不安装提示:Driver [Think] not supported.)
关于多应用模式这块 可能自己没注意文档说明, 如果不安装你比如在app\index\index\demo
始终都是找不到控制器不存在:app\controller\Index
查了半天教程 我的app设置里面也没有自动多应用模式 自己手动添加你根本没卵用,别踩坑.用composer安装
//自动多应用模式
‘auto_multi_app’ => true,

TP6的目录结构 (项目网站管理位置直接指向public吧 )
框架源码位置:vendor 应用目录名称与命名控件名称一致了:app

关于系统配置 环境变量统一配置:.env 使用框架内置环境变量管理器:think\Facade\Env
在项目目录直接创建一个.env的文件名(隐藏文件)
文件写法就是 以下以此类推
;开启跟踪器
app_trace = true

;数据库的配置项
database_type = ‘mysql’
database_hostname = ‘127.0.0.1’
database_database = ‘tp6’
database_username = ‘root’
database_password = ‘root’
database_charset = ‘utf8’

在app设置里面引用方法
引用的话就是use think\facade\Env;
调用的话就是Env::get(‘database_type’)

数据库的知识部分(推荐Adminer的轻量级管理工具 https://www.adminer.org/#download)
在PHP的WWW中创建mysql文件夹放入下载的adminer-4.7.6-mysql.php(注意这个后面有mysql标记)
重新修改命名index.php 然后网页访问127.0.0.1/mysql 就访问到了mysql这个网址了
创建tp6 校对规则是utf8_general_ci 最佳通用的utf8mb4_unicode_ci
创建表 列如:user InnoDB
查询方法:
use think\facade\Db; //TP6框架函数
原生SQL代码:dump( Db::query(“SELECT * FROM user LIMIT 1”));
TP6构造器:dump(Db::table(‘user’)->where(‘user_id’, 1)->findOrEmpty());
TP6数据库常用操作 方式:PDO预处理\统一入口:DB::\原生查询:query(),execute()
\构造器查询:table(),field(),find(),select(),where(),order()…

将controller/Index.php防止app新建index文件夹controller/Index.php打开网址 列如:http://www.tp53.io/index/
提示No input file specified.
则修改public下面的.htaccess文件 后面的参数添加?
RewriteRule ^(.*)$ index.php/ 1 [ Q S A , P T , L ] 修 改 后 R e w r i t e R u l e ( . ∗ ) 1 [QSA,PT,L] 修改后 RewriteRule ^(.*) 1[QSA,PT,L]RewriteRule(.) index.php?/$1 [QSA,PT,L]

以下是原生操作数据库的代码增删改查

namespace app\index\controller;
use think\facade\Db;
 //远程查询的读操作:query()
    public function demo()
    {
        // $sql = "SELECT `user_id`,`name`,`age` FROM `user` WHERE `age`>:age LIMIT:num";
        $sql = "SELECT `user_id`,`name`,`age` FROM `user` WHERE `age`>:age LIMIT :num";
        $map = ['age' => 25, 'num' => 2];
        $res = Db::query($sql, $map);
        dump($res);
    }

    //原生查询中的写操作:insert/update/delete,execute()
    public function demo1()
    {
        $sql = "UPDATE `user`SET `age`=:age WHERE `user_id`=:user_id";
        $map = ['age' => 31, 'user_id' => 2];
        $res = Db::execute($sql, $map);
        return '成功更新了' . $res . '条数据';
    }

    //查询构造器  table():设置数据表   field():设置查询字段列表  find():返回满足条件的第一条记录,单挑记录
    public function demo2()
    {
        $res = Db::table('user')
            ->field('user_id,name,age')
            ->find(2);//find():支持将主键作为参数
        dump($res);
    }

    //select():返回满足条件的多条记录
    public function demo3()
    {
        $res = Db::table('user')
            ->field('user_id,name,age')
            ->select();
        dump($res);
    }
    //where():设置查询条件,字符串,表达式,数组
    //fetchSql(): true,false
    public function demo4()
    {
        $res = Db::table('user')
           // ->field('user_id,name,age')
         //   ->where('user_id = 1')
//            ->where('user_id','=',1)  //2表达式 (字段,操作符,值)
          //  ->where('age','between',[10,30]) //设置查询条件是年龄10~30之间的数值
         //       ->where(['user_id'=>1,'age'=>25])//数组多条件查询
            ->where([
                0=>['age','between',[10,30]],
                1=>['age','=',25]
               ]) //索引数组查询条件
            //->fetchSql(true) //输出原生SQL查询语句"SELECT `user_id`,`name`,`age` FROM `user` WHERE  ( user_id = 1 )"
            ->select();
        dump($res);
    }
    //order();limit();
    public function demo5(){
        $res = Db::table('user')
            ->field('user_id,name,age')
           // ->order('age desc') //asc升序 desc降序
              // ->order(['user_id'=>'asc','age'=>'desc'])  //多字段排序,用数组参数
           ->limit(2,2)  //分页 参1偏移量,参2没页输出的量
           ->select();
        dump($res);
    }

数据模型的操作 模型的优点:直观 方便 好维护
查询db() 新增create() 更新update() 删除destory()
使用模型 在前端比如index\创建model创建表名一致的表名user 我们创建User.php
引用use think\Model; 继承 class User extends Model
可以给这个模型类进行一些约定
protected $table = ‘user’; //绑定表
protected $pk = ‘user_id’; //绑定主键id

以下是模型操作数据库的代码增删改查

namespace app\index\model;
use think\Model;
class User extends  Model
{
    protected $table = 'user'; //绑定表
    protected $pk = 'user_id'; //绑定主键id
}
namespace app\index\controller;
use app\index\model\User;
class ModelTest
{
    //模型对象
    public function demo1(){
        //创建模型对象
       $user =  new User();
       $res =  $user->db()->find(1);
       dump($res);
    }

    //依赖注入
    public function demo2(User $user){
        $res =  $user->db()->find(3);
        dump($res);
        var_dump($res);
        echo "
"
; echo $res['name']; //数组方式 echo "
"
; echo $res->name; //对象的方式访问数据 } //新增 create(): 参数就是新增的数据,返回值当前模型对象 public function insert(){ $data=[ 'name'=>'乔峰', 'age'=>40, 'email'=>'qiaofei$php.cn', 'password'=>sha1('123456') ]; $user = User::create($data); $insertId = $user['user_id']; return '新增成功,新增记录的主键ID是:'.$insertId; } //在tp6中删除了传统的get/all,直接用db()来调用Query类中的方法完成 public function select(User $user){ //查询单条 $res1=$user->db()->find(4); var_dump($res1); echo '
'
; //多条记录查询 $res2=$user->db()->where('age','>',30)->select(); var_dump($res2); echo '
'
; } //更新操作 update 参1更新的地方,参2更新的条件 public function update(){ $user = User::update(['age'=>50],['user_id'=>2]); return '年龄已经更新成'.$user['age']; } //删除:destroy(); public function destroy(){ // $res = User::destroy(['user_id'=>5]) ; // return $res?'删除成功':'删除失败'; //以下是闭包的方法来做 $res = User::destroy(function ($query){ $query->where('user_id',4); }) ; return $res?'删除成功':'删除失败'; } }

模板绑定及传递参数
引用use think\View;
class View {
public function demo(View $view){
//默认的视图是View
return $view->fetch();
}
}

下面是模板赋值的代码

namespace app\index\controller;
use think\View;
use app\index\model\User;
class ViewTest
{
    public function demo(View $view){
        return $view->fetch();
    }

    public function demo1(View $view){
        //变量
        $site = '这是一个变量';
        $view->assign('site',$site); //传一个变量
        //一组数组
        $view->assign(['name'=>'admin','email'=>'[email protected]']); //传一组变量
        //数组
        $data = ['brand'=>'华为','model'=>'P20','price'=>8888];
        $view->assign('mobile',$data);
        //对象
        $obj = new \stdClass();
        $obj->course = 'php';
        $obj->grade = 95;
        $view->assign('obj',$obj);
        //预定义变量:$_GET,$_SERVER 直接在模板中使用
        return $view->fetch();
    }

    //流程控制
    public function demo3(View $view,User $user){
        $res = $user->db()->select();
        $view->assign('users',$res);
        return $view->fetch();
    }
}

html调用

<body>
流程控制主要包括:循环遍历 和条件判断
<hr>
先用原生php代码 2种方案都可以
<?php foreach($users as $key => $user): ?>
<!--<p>-->
<!--    <?php echo $key;?>-->
<!--    <?php echo $user['name'];?>-->
<!--    <?php echo $user['age'];?>-->
<!--    <?php echo $user['email'];?>-->
<!--</p>-->

<p><?=$key?>:<?=$user['name']?>--<?=$user['age']?><?=$user['email']?></p>
<?php endforeach; ?>
<hr>
用think6的模板引擎写foreach
{foreach $users as $key=>$user}
<p>{$key}:{$user['name']}--{$user['age']}--{$user['email']}</p>
{/foreach}
<hr>
volist跟上面的很像
{volist name="users" id="user"}
<p>{$key}:{$user['name']}--{$user['age']}--{$user['email']}</p>
{/volist}
<hr>
条件判断:年龄小于30{foreach $users as $key=>$user}
{if($user.age<30)}
<p>{$key}:{$user['name']}--{$user['age']}--{$user['email']}</p>
{/if}
{/foreach}
</body>

你可能感兴趣的:(ThinkPHP)