【PHP】ThinkPHP基础

下载composer

ComposerA Dependency Manager for PHPicon-default.png?t=O83Ahttps://getcomposer.org/

安装composer

查看composer是否安装

composer
composer --version

安装 ThinkPHP6

如果你是第一次安装的话,首次安装咱们需要打开控制台:

进入后再通过命令,在命令行下面,切换到你的WEB根目录下面:

cd E:\Web\www

接着输入以下命令安装 tp6.0:

composer create-project topthink/think tp621

这里的tp621目录名你可以任意更改,这个目录就是我们后面会经常提到的应用根目录。

查看当前安装的tp61版本

cd到tp61,然后输入:php think version即可运行成功

php think version

报错解决

开启debug调试:

找到app同级目录文件.example.env,更名为.env,另外在文件中要加上一句:APP_DEBUG = true,保存。

视图安装

视图功能由\think\View类配合视图驱动(也即模板引擎驱动)类一起完成,新版仅内置了PHP原生模板引擎(主要用于内置的异常页面输出),如果需要使用其它的模板引擎需要单独安装相应的模板引擎扩展。如果需要使用thinkTemplate模板引擎,需要安装think-view扩展(该扩展会自动安装think-template依赖库)

该扩展跟tp6安装多应用扩展一样,需要安装think-template(命令:composer require topthink/think-view),切记一定要在项目根目录进行安装

使用cmd窗口,将目录切换到ThinkPHP文件根目录下,使用composer安装thinkview引擎模板:

d:
cd /xampp/htdocs/tp
composer require topthink/think-view

配置文件

安装完成后,在config目录的view.php文件中进行模板引擎相关参数的配置

(多应用则是相应的应用下view.php),例如:

开启多应用模式

在默认情况下 tp6.0 是单应用模式,在开启多应用模式后目录结构会发生变化(如何开启后面学到再说)

在此只说明两者目录区别,在单应用模式下,app目录即使应用目录

若使用多应用模式时,在app 目录下将会多出一个文件夹则是不同应用的目录

在这个文件夹下需要放入默认的应用文件(原先的应用文件复制进去),多个项目创建多个即可。

四、站点应用入口

整个tp6.0 的文件入口在 public 目录下:

修改 index.php 你会发现访问后会有不同的效果。

若你想试着改变 index.php,例如修改如下(删除多余代码):

1. 开启多应用模式
默认是单应用的

如果要使用多应用模式,你需要安装多应用模式扩展think-multi-app。

composer require topthink/think-multi-app


扩展安装成功之后,在config目录下找到第一个app.php文件打开,在app.php添加配置: 'auto_multi_app' => true

app中的目录结构调整为 

一定要修改namespace对应上应用的名称

模板渲染,模板路径

ThinkPHP 6 视图

ThinkPHP6.0框架默认支持PHP原生模板的配置及使用,包括修改配置文件将模板引擎改为PHP,以及模板渲染和变量赋值的方法。同时,文章也详细阐述了如何安装和配置thinkTemplate扩展,以及TP模板引擎的安装、配置、变量处理和模板渲染过程,包括模板路径、渲染规则和视图过滤。最后提到了如何切换和初始化不同的模板引擎。

框架6.0默认只能支持PHP原生模板,如果需要使用thinkTemplate模板引擎,需要安装think-view扩展(该扩展会自动安装think-template依赖库)。

PHP原生模板

1.配置文件,修改模板引擎

默认设置为Think,因为没有安装,直接使用会报错;

使用php原生模板,需要修改配置目录的view.php文件的模板引擎为`php`

多应用则是相应的应用下view.php):

// 模板引擎类型使用Think
'type'          => 'php',

报错提示

4.模板渲染

这里做一个简单示例,TP的模板渲染会做更详细讲解,

因为php原生模板变量渲染与常规TP不同,故作此示例:

5.控制器文件
// 添加引用
use think\facade\View;
// 变量赋值
View::assign('name', '张三');
// 模板输出
return View::fetch('user/index');

6.视图文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户详情</title>
</head>
<body>
    <h1>用户详情</h1>
    <p>我是<?php echo $name ?></p>
</body>
</html>

TP模板引擎

1.安装

安装thinkview模板引擎,使用cmd窗口,将目录切换到ThinkPHP文件根目录下,使用composer安装thinkview引擎模板:

cd E:\Web\www\tp831
composer require topthink/think-view

2.配置文件

安装完成后,在配置目录的view.php文件中进行模板引擎相关参数的配置

应用则是相应的应用下view.php),例如:

比如我习惯模板变量标签是两个花括号,改一下这里就行

// 模板引擎普通标签开始标记
'tpl_begin'     => '{{',
// 模板引擎普通标签结束标记
'tpl_end'       => '}}',
// 标签库标签开始标记
'taglib_begin'  => '{{',
// 标签库标签结束标记
'taglib_end'    => '}}',

模板变量

View门面全局变量赋值
public function index()
{
    // 单次赋值
    View::assign('name', '张三');
    // 批量赋值
    View::assign(['gender' => '男', 'school' => '本科']);
    // 输出模板
    return View::fetch('user/index');
}

View门面当前模板赋值
public function index()
{
    // 输出模板
    return View::fetch('user/index', [
        'name' => '张三',
        'gender' => '男',
        'school' => '本科'
    ]);
}

助手函数当前模板赋值
public function serviceContractPreview()
{
    // 输出模板
    return view('user/index', [
        'name' => '张三',
        'gender' => '男',
        'school' => '本科'
    ]);
}

切换模板引擎

1.Engine初始化

视图类提供了engine方法对模板解析引擎进行初始化来切换不同的模板引擎:

使用门面View(think\facade\View)

没有变量赋值,直接输出模板

namespace app\index\controller;
 
use think\facade\View;
 
class Index
{
    public function index()
    {
        // 使用内置PHP模板引擎渲染模板输出
        return View::engine('php')->fetch();
    }
}

如果有变量赋值

namespace app\index\controller;
 
use think\facade\View;
 
class Index
{
    public function index()
    {
        // 初始化内置PHP模板引擎
        View::engine('php');
        // 变量赋值
        View::assign('name', '张三');
        // 模板输出
        return View::fetch('index');
    }
}
2.Config信息修改

如果需要动态改变模板引擎的参数,请使用视图类提供的config方法进行动态设置

namespace app\index\controller;
 
use think\facade\View;
 
class Index
{
    public function index()
    {
        // 改变当前操作的模板路径
        View::config(['type' => 'php']);
        // 变量赋值
        View::assign('name', '张三');
        // 模板输出
        return View::fetch('index');
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/915954.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【HarmonyOS】应用实现读取剪切板内容(安全控件和自读取)

【HarmonyOS】应用实现读取粘贴板内容(安全控件和自读取) 前言 三方应用 读取系统剪切板是比较常见的功能。可以实现功能入口的快捷激活跳转&#xff0c;以及用户粘贴操作的简化&#xff0c;增强用户的体验感。 但是在用户日渐注重隐私的今天&#xff0c;系统对于剪切板权限的…

飞牛云fnOS本地部署WordPress个人网站并一键发布公网远程访问

文章目录 前言1. Docker下载源设置2. Docker下载WordPress3. Docker部署Mysql数据库4. WordPress 参数设置5. 飞牛云安装Cpolar工具6. 固定Cpolar公网地址7. 修改WordPress配置文件8. 公网域名访问WordPress 前言 本文旨在详细介绍如何在飞牛云NAS上利用Docker部署WordPress&a…

解析安卓镜像包和提取DTB文件的操作日志

概述 想查看一下安卓的镜像包里都存了什么内容 步骤 使用RKDevTool_v3.15对RK3528_DC_HK1_RBOX_K8_Multi_WIFI_13_20230915.2153.img解包 路径: 高级(Advancing) > 固件(firmware) > 解包(unpacking)得到\Output\Android\Image boot.imguboot.imgsuper.img 处理boot.…

LeetCode 热题100(八)【二叉树】(3)

目录 8.11二叉树展开为链表&#xff08;中等&#xff09; 8.12从前序与中序遍历序列构造二叉树&#xff08;中等&#xff09; 8.13路径总和III&#xff08;中等&#xff09; 8.14二叉树的最近公共祖先&#xff08;中等&#xff09; 8.15二叉树中的最大路径和&#xff08;困…

FPGA实现PCIE3.0视频采集转SDI输出,基于XDMA+GS2971架构,提供工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案本博已有的 SDI 编解码方案本博客方案的PCIE2.0版本 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频QT上位机XDMA配置及使用XDMA中断模块FDMA图像缓存Native视频时序生成RGB转BT1120SDI转HDM…

纽约大学:指导LLM提出澄清性问题

&#x1f4d6;标题&#xff1a;Modeling Future Conversation Turns to Teach LLMs to Ask Clarifying Questions &#x1f310;来源&#xff1a;arXiv, 2410.13788 &#x1f31f;摘要 &#x1f538;大型语言模型&#xff08;LLM&#xff09;必须经常对高度模糊的用户请求做出…

STM32F1学习——I2C通信

一、I2C通信一带多 在学习通信的时候&#xff0c;我们常会听到串口通信。但串口通信只限定两个设备之间&#xff0c;如果有多个设备&#xff0c;通信的两个设备就要连接上&#xff0c;接线复杂。所以有了总线式通信&#xff0c;在一条总线上可以连接多个设备&#xff0c;这些根…

当你想要conda安装遇到UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel的问题

想要装个虚拟环境&#xff0c;结果遇到404。 看了第一个GitHub帖子中的一句话 UnavailableInvalidChannel: The channel is not accessible or is invalid. Navigator not launching. Issue #9473 conda/conda GitHub 想说那我就把这个not found的channel删掉吧&#xff…

Jmeter中的前置处理器(一)

前置处理器 1--JSR223 PreProcessor 功能特点 自定义数据处理&#xff1a;使用脚本语言处理请求数据&#xff0c;实现高度定制化的数据处理和生成。动态数据生成&#xff1a;在请求发送前生成动态数据&#xff0c;如随机数、时间戳等。变量设置&#xff1a;设置和修改 JMeter…

2023年高校大数据挑战赛A题中文文本纠错求解全过程文档及程序

2023年高校大数据挑战赛 A题 中文文本纠错 原题再现&#xff1a; 中文文本纠错的任务主要是针对中文文本中出现的错误进行检测和纠正&#xff0c;属于人工智能自然语言处理的研究子方向。中文文本纠错通常使用的场景有政务公文、裁判文书、新闻出版等&#xff0c;中文文本纠错…

使用CNN进行验证码识别:深度学习与图像预处理教程

验证码&#xff08;CAPTCHA&#xff09;广泛用于区分人类和自动化程序&#xff08;如机器人&#xff09;&#xff0c;通常由扭曲的字母、数字或符号组成。为了实现验证码的自动识别&#xff0c;深度学习尤其是卷积神经网络&#xff08;CNN&#xff09;非常有效。本文将带你一起…

基于 Python Django 的二手房间可视化系统分析

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

探索 Sentinel 服务容错

Sentinel 是阿里巴巴开源的一款高可用防护组件,主要用于分布式系统中的流量控制、熔断降级和系统负载保护。它在 Java 微服务架构中扮演着重要的角色,帮助开发者确保系统的稳定性和可靠性。 以下是 Sentinel 的一些关键特性: 流量控制(Flow Control):通过对请求进行限流…

DBeaver 连接 OceanBase Oracle 租户

DBeaver 是一款通用的数据库工具软件&#xff0c;支持任何具有JDBC驱动程序的数据库。DBeaver 需要 Java 运行环境的支持。截稿时 DBeaver 24.0.0 版本默认提供的 OceanBase 驱动是连接 MySQL 的&#xff0c;想连接 Oracle 租户需要新建一个驱动器使用。 下载数据库驱动包 1、…

Dubbo 3.x源码(24)—Dubbo服务引用源码(7)接口级服务发现订阅refreshInterfaceInvoker

基于Dubbo 3.1&#xff0c;详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了Dubbo3.1版本的MigrationRuleHandler这个处理器&#xff0c;它用于通过动态更改规则来控制迁移行为。MigrationRuleListener的onrefer方法是Dubbo2.x 接口级服务发现与Dubbo3.x应用级服务发现…

企业如何提高招聘能力?

企业如何提高招聘能力&#xff1f; 许多企业在进行招聘工作时&#xff0c;常常会遇到各种问题和挑战。尽管付出了大量的时间和精力&#xff0c;但结果却并不总是如人意。例如&#xff0c;企业可能会经历一次又一次的面试&#xff0c;却仍然找不到一个能够适应岗位要求的合适人…

JAVA:探索 EasyExcel 的技术指南

1、简述 在 Java 开发中&#xff0c;Excel 文件的读写操作是一项常见的需求。阿里巴巴开源的 EasyExcel 提供了一种高效、简洁的解决方案&#xff0c;特别是在处理大规模数据时表现尤为突出。本文将详细介绍 EasyExcel 的优缺点、应用场景&#xff0c;并通过实例展示其基本用法…

AI制作ppt

1&#xff0c;kimi&#xff1a; 实际上也是AiPPT.cn这个网站&#xff08;但是有实际次数限制&#xff09; 2&#xff0c;其余专业AI ppt生成网站&#xff1a; &#xff08;1&#xff09;gamma&#xff1a;https://gamma.app/ 大概能制作7~10页左右 free的ppt&#xff0c;其余要…

穿越数据迷宫:C++哈希表的奇幻旅程

文章目录 前言&#x1f4d4;一、unordered系列关联式容器&#x1f4d5;1.1 unordered 容器概述&#x1f4d5;1.2 哈希表在 unordered 容器中的实现原理&#x1f4d5;1.3 unordered 容器的特点 &#x1f4d4;二、unordered_set 和 unordered_map 的基本操作&#x1f4d5;2.1 un…

数据结构 -二叉搜索树

一.什么是二叉搜索树 树插入删除方便比线性数组 二.二叉搜索树的查找操作 尾递归可以用循环递归 三.二叉树的插入操作 35要挂在33上面必须记住33的位置 解决方法&#xff0c;要求递归函数返回一个 结点插到33的右子树 四.二叉搜索树的删除 要是删除的是叶子节点之间删除 只有一…