汇总ThinkPHP6入门手册

Posted Rudon滨海渔村

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇总ThinkPHP6入门手册相关的知识,希望对你有一定的参考价值。

安装

安装Composer

【Linux & MacOS】

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

 【Windows】 
https://getcomposer.org/Composer-Setup.exe

设置Composer使用国内镜像(阿里云)

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/


安装TP框架到文件夹./xx/

composer create-project topthink/think xx

安装TP框架到当前文件夹

composer create-project topthink/think ./


升级又有的TP框架

composer update topthink/framework

框架初始化配置

配置TP框架

cd /path/to/tp6/project/
cp .example.env .env


开启调试模式

修改/.env的APP_DEBUG为TRUE

设置数据库信息

修改/.env的mysql配置

配置Web服务器

在apache、nginx中启用项目

web根目录:/public/


TP6隐藏index.php
【nginx】

location /
  if (!-e $request_filename)
    rewrite ^(.*)$ /index.php?s=$1 last; break;
 


【apache】

修改/public/.htaccess文件,找到:
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
在index.php后面加一个问号,变成:
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]

单应用路由

单应用简单路由使用 - tp6实现简单路由跳转 - 单应用模式
https://blog.csdn.net/qq285744011/article/details/124402231


TP6短网址路由配置(同一个app下,缩短网址)
https://blog.csdn.net/qq285744011/article/details/120331470
中间左右

多应用 - 路由

TP6开启多应用

1.cd /D/www/tp6.com/
2.rm -R app/*    [删掉根目录下的app目录下的所有文件]
3.composer require topthink/think-multi-app
4.php think build Name-of-APP-1
5.php think build Name-of-APP-2
6.修改/config/app.php的“default_app”为自建的app名称

简单view视图模板输出

先安装tp官方的模板引擎驱动:

composer require topthink/think-view

控制器:

/app/controller/Api.php

<?php
namespace app\\controller;

use app\\BaseController;
use think\\facade\\View;


class Api extends BaseController

    public function fn2 () 
        View::assign('name','ThinkPHP');
        View::assign([
            'name22'  => 'tp6框架',
            'numbers' => array(
                1, 2, 5, 9, 18
            )
        ]);

        // 没有参数,默认是当前函数名 /view/api/fn2.html
        return view(); 

        // 有参数,就是在同目录下的 /view/api/fn3.html
        // return View::fetch('fn3'); 
    

模板文件:

/view/api/fn2.html

<h2>
    name: $name
</h2>
<h4>
    name22: $name22
</h4>

<ul>
foreach $numbers as $k=>$v
    <li>
        $k=>$v
    </li>
/foreach
</ul>

【注意】

api是控制器,fn2是方法名,全小写

更多模板语法

模板 · ThinkPHP5.1完全开发手册 · 看云5.1版本对底层进行了一些架构调整和优化,采用更加对象化的开发模式,支持容器和Facade,对路由、依赖注入及验证进行了改进。https://www.kancloud.cn/manual/thinkphp5_1/354069

TP6模板嵌套 - layout_on开启 - 模板页面布局 - 公用header

thinkphp6模版布局操作 layout公共模板使用 公共头部 公用导航栏

模板布局 · ThinkPHP5.0完全开发手册 · 看云ThinkPHP V5.0是一个为API开发而设计的高性能框架——是一个颠覆和重构版本,采用全新的架构思想,引入了很多的PHP新特性,优化了核心,减少了依赖,实现了真正的惰性加载,支持composer,并针对API开发做了大量的优化。ThinkPHP5是一个全新的里程碑版本,包括路由、日志、异常、模型、数据库、模板引擎和验证等模块都已经重构,不适合原有3.2项目的升级,请慎重考虑商业项目升级,但绝对是新项目的首选(无论是WEB还是API开发),而且最好是忘记3.2版本的思维习惯,重新理解TP5。https://www.kancloud.cn/manual/thinkphp5/125013

数据库连接、操作

设置数据库信息

修改/.env的mysql配置

超全的增删改查操作实例

ThinkPHP6.0数据库操作 

ThinkPHP6.0数据库操作_qq_40861624的博客-CSDN博客_thinkphp6 操作数据库查询数据查询单个数据查询单个数据使用find方法:// table方法必须指定完整的数据表名Db::table('think_user')->where('id', 1)->find();find方法查询结果不存在,返回 null,否则返回结果数组;如果希望在没有找到数据后抛出异常可以使用Db::table('think_user')->where('id', 1)->findOrFail();如果没有查找到数据,则会抛出一个think\\db\\exception\\https://blog.csdn.net/qq_40861624/article/details/119565940

不用model模型实现controller简单查询

<?php
namespace app\\controller;

use app\\BaseController;
use think\\facade\\Db;

class Api extends BaseController

    public function getxx()
    
        // 粗略的说:
        // find()返回一个一维数组,
        // select()返回一个对象,
        // select()->toArray()返回一个二维数组
        // 更多 https://www.kancloud.cn/manual/thinkphp6_0/1037533


        // 返回全部行数据
        $res = Db::table('app')->where()->toArray(); // 全部
        $res = Db::table('app')->where(10)->toArray(); // id = 10
        print_r($res);

        // 返回数组或null
        $res = Db::table('app')->where('id', 1)->find();
        print_r($res);
        // Array ( [id] => 1 [name_en] => client [name_zh] => 客户 [amt] => 100 )


        // 查询某一列的值(单行)
        $res = Db::table('app')->where('id', 3)->column('name_zh');
        print_r($res); 
        // Array ( [0] => 头条新闻 )

        
        // 查询某一列的值(多行)
        $res = Db::table('app')->where('id', '<=', 3)->column('name_zh');
        print_r($res); 
        // Array ( [0] => 客户 [1] => 短视频 [2] => 头条新闻 )


        // 指定id字段的值作为索引 (单行)
        $res = Db::table('app')->where('id', 3)->column('name_zh', 'id');
        print_r($res);
        // Array ( [3] => 头条新闻 )
        

        // 指定id字段的值作为索引 (多行)
        $res = Db::table('app')->where('id', '<=', 3)->column('name_zh', 'id');
        print_r($res);
        // Array ( [1] => 客户 [2] => 配送 [3] => 厂家 )

        return '';
    

使用model模型实现快捷数据库操作

C

<?php
namespace app\\controller;

use app\\BaseController;
use think\\facade\\Db;

// 数据库有表`store`,我们在tp项目中有对应的model文件/app/model/Store.php
use app\\model\\Store;

class Api extends BaseController

    public function getxx()
    
        $dbs = Store::findAll()->toArray();
        print_r($dbs);
        die();

        return '';
    

M:/app/model/Store.php

<?php
namespace app\\model;

use think\\Model;

class Store extends Model

    

报错、错误集锦

1.

《报错》

Call to undefined method think\\Db::table() 【当controller使用use think\\Db;时】

或者 Class 'app\\controller\\Db' not found

《原因》

这是因为你引入了think\\Db这个类,但是你没有实例化,所以不能使用Db::table()这种操作,需要引入think\\Facade\\Db这个类才能使用Db::table(),我现在遇到的问题是我用了Db::table()这个方式,引入了think\\Facade\\Db,但是系统报错说找不到数据库类型
Call to undefined method think\\Db::table() - ThinkPHP框架

《解决办法》

controller引入DB类时,应该使用门面装饰一下 :use think\\facade\\Db;

2.

TP5.1 门面(Facade)的使用
TP5.1 门面(Facade)的使用 - 简书

3.

No input file specified.    (ThinkPHP5、tp6错误)

解决办法:

1)可能是vendor的包太旧或者缺失,试试TP根目录下进行composer update

2)如果是apache服务器,有可能是因为.htaccess设置不对,要把

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

改为

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

3)如果是nginx服务器,有可能是因为没有配置当前网站忽略index.php,需要配置一下:

location /
        try_files $uri $uri/ /index.php$is_args$args;
        autoindex on;
   

改为

location /
        try_files $uri $uri/ /index.php$is_args$args;
        autoindex on;
        if (!-e $request_filename)
            rewrite ^(.*)$ /index.php?s=$1 last; break;
        
   

4)最后,有可能是因为public目录下多了一个碍事的\\public\\.user.ini,删掉即可

效果:

进阶知识点

tpl视图布局、公用header 模板布局 · ThinkPHP5.0完全开发手册 · 看云

自定义404页面  404页面 · ThinkPHP5.0完全开发手册 · 看云

'http_exception_template'    =>  [
    // 定义404错误的模板文件地址
    404 =>  \\think\\facade\\App::getRootPath() . '404.html', // 根目录下的404.html
    // 还可以定义其它的HTTP status
    401 =>  \\think\\facade\\App::getRootPath() . '401.html', // 根目录下的401.html
]

// 保存在/config/app.php,要设置show_error_msg为false,另外设置.env的app_debug为false

session自动开启 Session · thinkphp6文档 · 看云

tpl视图常量替换 视图配置:view.php · thinkphp6文档 · 看云

tpl视图资源实现 <link rel="stylesheet" href="__STATIC__/css/xx.css">

启用内置验证码 验证码 · thinkphp6文档 · 看云

模板缓存关闭 ('tpl_cache' => false,)  视图配置:view.php · thinkphp6文档 · 看云

本地log开启 日志配置:log.php · thinkphp6文档 · 看云

多语言实现 多语言 · thinkphp6文档 · 看云

中间件检查登录(排除部分action)中间件(middleware) · thinkphp6文档 · 看云

表单验证助手 验证 · thinkphp6文档 · 看云

聊天室 Workerman Workerman · thinkphp6文档 · 看云

以上是关于汇总ThinkPHP6入门手册的主要内容,如果未能解决你的问题,请参考以下文章

11 验证器《ThinkPHP6 入门到电商实战》

11 验证器《ThinkPHP6 入门到电商实战》

thinkphp6速查手册

ThinkPHP6新增‘’多应用‘’与ThinkPHP5有啥区别

ThinkPHP6手册里没有的一些用法

02 控制器《ThinkPHP6 入门到电商实战》