ThinkPHP6.0 Divers


1. Session

  • Pour utiliser la classe Session, vous devez utiliser la méthode façade (thinkfacadeSession) pour appeler Session类必须使用门面方式( thinkfacadeSession )调用

  • 新版本不支持操作原生$_SESSION数组和所有session_开头的函数,只能通过Session类(或者助手函数)来操作

1、配置文件 session.php

return [
    // session name
    'name'           => 'PHPSESSID',
    // SESSION_ID的提交变量,解决flash上传跨域
    'var_session_id' => '',
    // 驱动方式 支持file cache
    'type'           => 'file',
    // 存储连接标识 当type使用cache的时候有效
    'store'          => null,
    // 过期时间
    'expire'         => 1440,
    // 前缀
    'prefix'         => '',
];

2、开启Session

  • 中间件 appmiddleware.php 文件

\think\middleware\SessionInit::class

3、设置

  • session 支持多级数组操作

Session::set('name','欧阳克');
// Session数组
Session::set('admin.name','欧阳克');
Session::set('admin.uid',1);

4、读取

// 获取全部Session
Session::all();
// 获取Session中name的值
Session::get('name');

5、删除

Session::delete('name');

6、取值并删除

Session::pull('name');

7、登陆示例

  • 新建login.php文件

namespace app\controller;
use think\facade\View;
use think\facade\Db;
use think\facade\Request;
use think\facade\Session;
class Login{
    public function index(){
        if(Request::method() == 'POST'){
            $all = Request::param();
            $admin = Db::table('shop_admin')->where('account',$all['account'])->find();
            if(empty($admin)){
                echo json_encode(['code'=>1,'msg'=>'未找到管理员']);
                exit;
            }
            if(md5($all['pwd']) != $admin['password']){
                echo json_encode(['code'=>1,'msg'=>'密码错误']);
                exit;
            }
            Session::set('uid',$admin['uid']);
            Session::set('account',$admin['account']);
            echo json_encode(['code'=>0,'msg'=>'登陆成功']) ;
        }else{
            $title = '商城';
            View::assign([
                'title'  => $title
            ]);
            return View::fetch();
        }
    }
}
  • 新建Login/index.html文件

<!DOCTYPE html>
<html>
<head>
    <title>登录</title>
    <link rel="stylesheet" type="text/css" href="/static/layui/css/layui.css">
    <script type="text/javascript" src="/static/layui/layui.js"></script>
</head>
<body style="background: #1E9FFF">
    <div style="position: absolute; left:50%;top:50%;width: 500px;margin-left: -250px;margin-top: -200px;">
        <div style="background: #ffffff;padding: 20px;border-radius: 4px;box-shadow: 5px 5px 20px #444444;">
            <form class="layui-form">
                <div class="layui-form-item" style="color:gray;">
                    <h2>{$title}--后台管理系统</h2>
                </div>
                <hr>
                <div class="layui-form-item">
                    <label class="layui-form-label">用户名</label>
                    <div class="layui-input-block">
                        <input type="text" id="account" class="layui-input">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">密&nbsp;&nbsp;&nbsp;&nbsp;码</label>
                    <div class="layui-input-block">
                        <input type="password" id="password" class="layui-input">
                    </div>
                </div>
                <div class="layui-form-item">
                    <div class="layui-input-block">
                        <button type="button" class="layui-btn" onclick="dologin()">登录</button>
                    </div>
                </div>
            </form>
        </div>
    </div>
    <script type="text/javascript">
        layui.use(['layer'],function(){
            $ = layui.jquery;
            layer = layui.layer;
            // 用户名控件获取焦点
            $('#account').focus();
            // 回车登录
            $('input').keydown(function(e){
                if(e.keyCode == 13){
                    dologin();
                }
            });
        });
        function dologin(){
            var account = $.trim($('#account').val());
            var pwd = $.trim($('#password').val());
            if(account == ''){
                layer.alert('请输入用户名',{icon:2});
                return;
            }
            if(pwd == ''){
                layer.alert('请输入密码',{icon:2});
                return;
            }
            $.post('/index.php/login/index',{'account':account,'pwd':pwd},function(res){
                if(res.code>0){
                    layer.alert(res.msg,{icon:2});
                }else{
                    layer.msg(res.msg);
                    setTimeout(function(){window.location.href = '/index.php/index/index'},1000);
                }
            },'json');
        }
    </script>
</body>
</html>
  • index/index.html文件

use think\facade\Session;
public function index(){
    $title = '商城';
    $session = Session::all();
    if(empty($session['uid'])){
        echo '<script type="text/javascript">alert("请登录!");window.location.href = "/index.php/login/index"; </script>';
        exit;
    }
    $login = $session['account'];
    # 左侧菜单
    $menu = Db::table('shop_menu')->where('fid',0)->select();
    $left = $menu->toArray();
    foreach($left as &$left_v){
        $left_v['lists'] = Db::table('shop_menu')->where('fid',$left_v['id'])->select();
    }
    # 右侧列表
    $param = Request::param();
    if(isset($param['status']) && $param['status'] == 1){
        $where['status'] = 1;
    }else if(isset($param['status']) && $param['status'] == 2){
        $where['status'] = 2;
    }else{
        $where = true;
    }
    $p = isset($param['p']) ? $param['p'] : 1;
    $db = new Goods();
    $order = [
        'add_time DESC',
        'id DESC'
    ];
    $right = $db->get_all($where,$order,$p,5);
    View::assign([
        'title'  => $title,
        'login' => $login,
        'left' => $left,
        'right' => $right['data'],
        'count' => $right['count'],
        'p' => $p,
        'status' => isset($param['status']) ? $param['status'] : 0
    ]);
    return View::fetch();
}

二、Cookie

  • 要使用Cookie类必须使用门面方式( thinkfacadeCookie )调用

  • 配置文件位于配置目录下的cookie.php文件,无需手动初始化,系统会在调用之前自动进行Cookie初始化工作

1、使用 Cookie

// 设置Cookie 有效期为 3600秒
Cookie::set('name', '欧阳克', 3600);
// 永久保存Cookie
Cookie::forever('name', '欧阳克');
//删除cookie
Cookie::delete('name');
// 读取某个cookie数据
Cookie::get('name');

2、Cookie 配置文件

  • config 目录下 cookie.php 文件

return [
    // cookie 保存时间
    'expire'    => 0,
    // cookie 保存路径
    'path'      => '/',
    // cookie 有效域名
    'domain'    => '',
    //  cookie 启用安全传输
    'secure'    => false,
    // httponly设置
    'httponly'  => false,
    // 是否使用 setcookie
    'setcookie' => true,
];

三、缓存

  • 要使用缓存必须使用门面方式( thinkfacadeCache )调用

  • 内置支持的缓存类型包括filememcachewincachesqliteredis

1、使用缓存

// 缓存在3600秒之后过期
Cache::set('number', 10, 3600);
// number自增(步进值为3)
Cache::inc('number',3);
// number自减(步进值为1)
Cache::dec('number');
// 获取缓存
Cache::get('number');
// 删除缓存
Cache::delete('number');
// push 追加缓存
Cache::set('name', ['欧阳克','朱老师']);
Cache::push('name', '西门大官人');
// 获取并删除缓存
Cache::pull('name');
// 清空缓存
Cache::clear();

2、缓存配置文件

  • config 目录下 cache.php 文件

return [
    // 默认缓存驱动
    'default' => 'file',
    // 缓存连接方式配置
    'stores'  => [
        'file' => [
            // 驱动方式
            'type'       => 'File',
            // 缓存保存目录
            'path'       => '',
            // 缓存前缀
            'prefix'     => '',
            // 缓存有效期 0表示永久缓存
            'expire'     => 0,
            // 缓存标签前缀
            'tag_prefix' => 'tag:',
            // 序列化机制 例如 ['serialize', 'unserialize']
            'serialize'  => [],
        ],
        // redis缓存
        'redis'   =>  [
            // 驱动方式
            'type'   => 'redis',
            // 服务器地址
            'host'   => '127.0.0.1',
        ],
        // 更多的缓存连接
    ],
];

四、公用控制器

  • BaseController.php 默认基础控制器类

use think\facade\View;
use think\facade\Db;
use think\facade\Session;
public function initialize(){
    $session = Session::all();
    if(empty($session['uid'])){
        echo '<script type="text/javascript">alert("请登录!");window.location.href = "/index.php/login/index"; </script>';
        exit;
    }
    $login = $session['account'];
    # 左侧菜单
    $menu = Db::table('shop_menu')->where('fid',0)->select();
    $left = $menu->toArray();
    foreach($left as &$left_v){
        $left_v['lists'] = Db::table('shop_menu')->where('fid',$left_v['id'])->select();
    }
    View::assign([
        'login' => $login,
        'left' => $left,
    ]);
}
Index/Index.php
namespace app\controller;
use app\BaseController;
use think\facade\View;
use think\facade\Db;
use think\facade\Request;
use app\model\Goods;
class Index extends BaseController{
    public function index(){
        $title = '商城';
        # 右侧列表
        $param = Request::param();
        if(isset($param['status']) && $param['status'] == 1){
            $where['status'] = 1;
        }else if(isset($param['status']) && $param['status'] == 2){
            $where['status'] = 2;
        }else{
            $where = true;
        }
        $p = isset($param['p']) ? $param['p'] : 1;
        $db = new Goods();
        $order = [
            'add_time DESC',
            'id DESC'
        ];
        $right = $db->get_all($where,$order,$p,5);
        View::assign([
            'title'  => $title,
            'right' => $right['data'],
            'count' => $right['count'],
            'p' => $p,
            'status' => isset($param['status']) ? $param['status'] : 0
        ]);
        return View::fetch();
    }
}

五、门面 Facade

  • 门面为容器中的(动态)类提供了一个静态调用接口,相比于传统的静态方法调用, 带来了更好的可测试性和扩展性,你可以为任何的非静态类库定义一个facade

  • 🎜Le nouveau la version ne prend pas en charge les opérations natives< Le tableau code>$_SESSION et toutes les fonctions commençant par session_ ne peuvent être utilisés que via la classe Session (ou la fonction d'assistance)🎜🎜1. Session de fichier de configuration .php🎜
    use think\facade\App;
    use think\facade\Db;
    use think\facade\View;
    use think\facade\Request;
    use think\facade\Session;
    class Index{
        public function index(){
            // 数据库操作
            $select = Db::table('shop_goods')->select();
            // 请求对象
            $param = Request::param();
            // Session
            $session = Session::all();
            // 视图
            return View::fetch();
        }
    }
    🎜2. Session ouverte🎜🎜🎜🎜Fichier appmiddleware.php du middleware🎜
use think\App;
use think\Db;
use think\View;
use think\Request;
use think\Session;
class Index{
    public function index(View $view,Db $db){
        $select = $db->table('shop_goods')->select();
        $view->assign([
            'name' => '欧阳克',
            'select' => $select
        ]);
        return $view->fetch();
    }
}
🎜3. 🎜session prend en charge les opérations de tableau à plusieurs niveaux 🎜rrreee🎜4. Lisez 🎜rrreee🎜5. Supprimez 🎜rrreee🎜6. Obtenez la valeur et supprimez 🎜rrreee🎜7. nouveau fichier login.php🎜rrreee🎜🎜🎜Nouveau fichier Login/index.html🎜rrreee🎜🎜🎜fichier index/index.html🎜< /ul>rrreee🎜II. Cookie🎜 🎜🎜🎜Pour utiliser la classe Cookie, vous devez utiliser la méthode façade (thinkfacadeCookie) pour appeler 🎜🎜🎜Le fichier de configuration se trouve dans le cookie.php dans le répertoire de configuration. Il n'est pas nécessaire de l'initialiser manuellement. Le système l'appellera avant d'effectuer automatiquement l'initialisation des cookies🎜🎜1. Utilisez Cookie🎜rrreee🎜2. 🎜🎜🎜🎜répertoire de configuration fichier cookie.php🎜rrreee🎜Trois , cache🎜🎜🎜🎜Pour utiliser le cache, vous devez utiliser la méthode de façade (thinkfacadeCache) pour appeler 🎜🎜🎜Les types de cache intégrés pris en charge incluent file, memcache , wincache, sqlite, redis🎜🎜1. Utilisez le cache🎜rrreee🎜2. Fichier de configuration du cache🎜🎜🎜🎜fichier cache.php du répertoire de configuration🎜rrreee. 🎜Quatre. Contrôleur public🎜🎜🎜🎜BaseController.php Classe de contrôleur de base par défaut🎜 rrreee🎜 5. Facade Facade🎜🎜🎜🎜Facade fournit une interface d'appel statique pour ( dynamique) dans le conteneur. Par rapport aux appels de méthodes statiques traditionnelles, cela apporte une meilleure fiabilité Testabilité et extensibilité, vous pouvez définir une classe facade pour n'importe quelle bibliothèque de classes non statiques🎜
Bibliothèque de classe (dynamique)Classe de façade
thinkAppthinkfacadeApp
thinkCachethinkfacadeCache
think Config thinkfacadeConfig
thinkCookiethinkfacadeCookie
thinkDbthinkfacadeDb
thinkEnv thinkfacadeEnv
thinkEventthinkfacadeEvent
thinkFilesystemthinkfacadeFilesystem
thinkLang thinkfacadeLang
thinkLog thinkfacadeLog
thinkMiddleware thinkfacadeMiddleware
thinkRequestthinkfacadeRequest
thinkResponsethinkfacadeResponse
thinkRoutethinkfacadeRoute
thinkSessionthinkfacadeSession
thinkValidatethinkfacadeValidate
thinkView thinkfacadeView

1. Classe Facade

  • La façade fournit une interface d'appel statique pour les classes (dynamiques) dans le conteneur, ce qui apporte une meilleure testabilité et évolutivité que l'appel de méthode statique traditionnel

  • Le système a défini Facade pour la plupart des bibliothèques de classes principales , afin que vous puissiez accéder à ces classes système via Facade

rrreee

2. Bibliothèque de classes (dynamique)

rrreee

6 Fonction d'assistance

  • Le système Thinkphp est utilisé pour certaines méthodes d'opération couramment utilisées encapsule la fonction d'assistance

    .
Fonction d'assistance Description
abort Interrompre l'exécution et envoyer le code d'état HTTP
app Obtenir rapidement l'instance dans le conteneur Prise en charge de l'injection de dépendances
lier rapidement liaison Instance d'objet définie
cache gestion du cache
class_basename Obtenir le nom de la classe (hors espace de noms)
class_uses_recursive Obtenir tous les traits utilisés dans une classe
config Obtenir et définir les paramètres de configuration
cookie Gestion des cookies
télécharger Obtenir thinkresponseTélécharger l'instance d'objet
dump Sortie variable conviviale pour le navigateur
env Obtenir les variables d'environnement
événement Événement déclencheur
arrêt Sortie de débogage variable et exécution d'interruption
entrée Obtenir les données d'entrée prend en charge la valeur par défaut et le filtrage
invoke Exécution de réflexion d'appel appelable Prise en charge de l'injection de dépendances
json Sortie de données JSON
jsonpSortie de données JSONP
lang Obtenir des variables de langue Valeur
parse_name Conversion de style de nommage de chaîne
redirect Redirection de sortie
request Obtenir l'objet Request actuel
response Instancier l'objet Response
ses sion Gestion de session
token Générer la sortie du jeton du formulaire
trace Enregistrer les informations du journal
trait_uses_recursive Obtenir tous les traits référencés dans un trait
url Génération d'URL
valider Instancier le validateur
afficher la sortie du modèle de rendu
affichage Sortie du contenu de rendu
xml Sortie de données XML
app_path Répertoire d'application actuel
base_path Répertoire de base d'application
config_path Répertoire de configuration des applications
public_path répertoire racine Web
root_path répertoire racine de l'application
runtime_path répertoire d'exécution de l'application



// Obtenez les données d'entrée, suivez Request::param ( ) a le même effet

$param = input();

// Sortie de débogage variable et exécution d'interruption

$shop = Db::table('shop_goods')->select();

halt($ shop ; >.env file

// Activer le mode de débogage et le débogage de trace

APP_DEBUG = true

Préparation : désactiver le mode de débogage après le déploiement formel
  • 2.

    ThinPHP est une méthode de dump débogage intégrée.env 文件

// 开启调试模式 和 Trace调试

APP_DEBUG = true

备:正式部署后关闭调试模式

2、变量调试

  • ThinPHP内置了 dump

$shop = Db::table('shop_goods')->select();

dump($shop);