IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> Thinkphp快速入门(三) -> 正文阅读

[PHP知识库]Thinkphp快速入门(三)

中间件

在执行主要逻辑之前进行某些操作或之后进行某些操作
常用来登录验证,csrf验证等

中间件创建
        # 中间件可以通过 php think make:middleware <middlewareName> 创建
        # 不过这是创建在 app/middleware 下的
        php think make:middleware stop
        # 如果想写在应用目录下的middleware目录中(如:app/admin/middleware 下)
        # 可以自己声明一个类
        # 只要有 public function handle($request, \Closure $next) 即可
        # 你会发现中间类是没有继承和实现某个接口的
        # 有点类似 python,goLang的 Duck Typing
全局中间件

写在根目录的middleware.php中
对全局有效
app/middleware.php

// 全局中间件定义文件
return [
    // 全局请求缓存
    // \think\middleware\CheckRequestCache::class,
    // 多语言加载
    // \think\middleware\LoadLangPack::class,
    // Session初始化
//     \think\middleware\SessionInit::class
];

应用中间件

写在应用的middleware.php中
对当前应用有效
app/admin/middleware.php

return [
    \think\middleware\SessionInit::class
];
路由中间件

写在路由文件中
针对指定的路由有效

use think\facade\Route;

# 针对一条路由使用中间件
Route::any('test', 'base.home/test')->middleware(\app\middleware\stop::class);

# 以组的形式针对多条路由使用中间件
Route::group(function () {
    Route::any('home', 'base.home/index');
    Route::any('look', 'base.home/look');
})->middleware(\app\middleware\stop::class);
控制器中间件

namespace app\admin\controller\base;

use app\BaseController;
use app\middleware\stop;
use app\Request;
use think\App;

class Home extends BaseController
{
    public function initialize()
    {
        # 当前控制器所有方法都使用中间件
        # $this->middleware = [stop::class];

        # 当前控制器除了index方法不使用中间件,其余方法都使用
        # $this->middleware = [stop::class => ['except' => 'index']];

        # 只给当前控制器index方法使用中间件
        $this->middleware = [stop::class => ['only' => 'index']];
    }

    public function index()
    {
        return captcha('verify');
    }

    public function test(Request $request)
    {
        return json(['name' => 'name'], 200, ['content-type' => 'text/json']);
    }

}

视图

引入视图组件
composer require topthink/think-view
渲染视图
namespace app\admin\controller\base;

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

class Home extends BaseController
{

    public function index()
    {
        # 模版的默认后缀是html,这里为php(我修改config/view.php 中 'view_suffix' => 'php')
        # /index 中的 "/" 代表 从当前应用目录下view中加载模板(app/admin/view/index.php)
        # 如果只写 index 代表从 根目录下的view中加载模板
        # 且加载文件层级 为 app/view/应用名/控制器层级/index(app/view/admin/base/home/index.php)
        return View::fetch('index');
    }
    
}

使用绝对路径渲染模版

namespace app\admin\controller\base;

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

class Home extends BaseController
{

    public function index()
    {
        # 如果想在admin应用渲染 根目录view/common/index.php 模版
        # 可以通过绝对目录解决这个问题
        return View::fetch(rtrim(root_path('view/common/index.php'), '/'));
    }

}
模版传参
namespace app\admin\controller\base;

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

class Home extends BaseController
{

    public function index()
    {
        # view::fetch($template,$vars)
        # $vars array 给模版传参
        # 模版中通过 {$name}...等可以渲染该参数值
        return View::fetch('/index', ['name' => 'this is name']);
    }

}
viwe 辅助函数

view辅助函数是在对View 视图的封装
提供了常用的参数设置
view(string $template = ‘’, $vars = [], $code = 200, $filter = null)
$template 模版地址 同 View::fetch() 中的模版地址用法相同
$vars 模版传参 同 View::fetch() 中的模版传参相同
$code 设置响应状态码
$filter 闭包函数,对最后输出的内容进行处理

namespace app\admin\controller\base;

use app\BaseController;
use think\App;

class Home extends BaseController
{

    public function index()
    {
        # content 是渲染完后的模版内容
        # 最后输出的是 “a” + 渲染的后的模板内容 + "b"
        return view('/index', ['name' => 'this is name'], 200, function ($content) {
            return "a" . $content . "b";
        });
    }

}
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:16:01  更:2022-04-22 18:16:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 11:42:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码