教程转至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();
}
}
<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>