【PHP】ThinkPHP基础

news2024/11/18 18:46:09

下载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');
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Elasticsearch基本概念及使用

Elasticsearch 是一个开源的、分布式的全文搜索和分析引擎&#xff0c;基于 Apache Lucene 构建。它提供了快速的搜索能力&#xff0c;支持大规模的数据分析&#xff0c;广泛应用于日志分析、全文搜索、监控系统和商业智能等领域。ES操作指令是基于restAPI构建&#xff0c;也就…

黑马智慧商城项目学习笔记

目录 智慧商城项目创建项目调整初始化目录vant组件库vant按需导入和全部导入 项目中的vw适配路由设计配置登录页静态布局图形验证码功能request模块-axios封装api模块-封装图片验证码接口 Toast轻提示&#xff08;vant组件&#xff09;短信验证倒计时功能登录功能响应拦截器统一…

攻防世界Web-bug

打开链接 先注册一个账号 创建成功&#xff0c;会给一个UID5 抓包的user值就是UID:用户名的md5加密的编码 点击Manage时要求admin用户 利用改包把user改成admin 1:admin的md5值为4b9987ccafacb8d8fc08d22bbca797ba 还要把url上的UID改为1 存在逻辑漏洞&#xff0c;成功越权 …

apk反编译修改教程系列-----apk应用反编译中AndroidManifest.xml详细代码释义解析 包含各种权限 代码含义【二】

💝💝💝💝在上期博文中解析了一个常规apk中 AndroidManifest.xml的权限以及代码。应粉丝需求。这次解析一个权限较高的apk。这款apk是一个家长管控的应用。需求的各种权限较高。而且通过管控端可以设置控制端的app隐藏与否。 通过博文了解💝💝💝💝 1💝💝…

湘潭大学软件工程算法设计与分析考试复习笔记(一)

文章目录 前言随机类&#xff08;第七章&#xff09;随机概述数值随机化舍伍德拉斯维加斯蒙特卡罗 模拟退火遗传人工神经网络 回溯&#xff08;第五章&#xff09;动态规划&#xff08;第四章&#xff09;后记 前言 考试还剩十一天&#xff0c;现在准备开始复习这门课了。好像全…

如何使用正则表达式验证域名

下面是一篇关于如何使用正则表达式验证域名的教程。 如何使用正则表达式验证域名 简介 域名是互联网上网站的地址&#xff0c;每个域名由多个标签&#xff08;label&#xff09;组成&#xff0c;标签之间用点 . 分隔。域名规则有很多细节&#xff0c;但基本要求是&#xff1a…

【Cesium】自定义材质,添加带有方向的滚动路线

【Cesium】自定义材质&#xff0c;添加带有方向的滚动路线 &#x1f356; 前言&#x1f3b6;一、实现过程✨二、代码展示&#x1f3c0;三、运行结果&#x1f3c6;四、知识点提示 &#x1f356; 前言 【Cesium】自定义材质&#xff0c;添加带有方向的滚动路线 &#x1f3b6;一、…

DDoS高防服务器:保障业务安全和稳定的抗攻击利器

摘要 随着网络攻击愈发频繁&#xff0c;尤其是DDoS&#xff08;分布式拒绝服务&#xff09;攻击的威胁不断增长&#xff0c;DDoS高防服务器成为保护企业网络安全的重要工具。本文将详细介绍DDoS高防服务器的原理、优势、应用场景及选择要点&#xff0c;帮助企业有效应对攻击&am…

vim配置 --> 在创建的普通用户下

在目录/etc/ 下面&#xff0c;有个名为vimrc 的文件&#xff0c;这是系统中公共的vim配置文件对所有用户都有效 我们现在创建一个普通用户 dm 创建好以后&#xff0c;我们退出重新链接 再切换到普通用户下 再输入密码&#xff08;是不显示的&#xff0c;输入完后&#xff0c;…

Python 正则表达式使用指南

Python 正则表达式使用指南 正则表达式&#xff08;Regular Expression, 简称 regex&#xff09;是处理字符串和文本的强大工具。它使用特定的语法定义一组规则&#xff0c;通过这些规则可以对文本进行匹配、查找、替换等操作。Python 提供了 re 模块&#xff0c;使得正则表达…

Golang | Leetcode Golang题解之第565题数组嵌套

题目&#xff1a; 题解&#xff1a; func arrayNesting(nums []int) (ans int) {n : len(nums)for i : range nums {cnt : 0for nums[i] < n {i, nums[i] nums[i], ncnt}if cnt > ans {ans cnt}}return }

微服务day10-Redis面试篇

Redis主从 搭建主从集群 建立集群时主节点会生成同一的replicationID,交给各个从节点。 集群中的缓冲区是一个环型数组&#xff0c;即若从节点宕机时间过长&#xff0c;可能导致命令被覆盖。 主从集群优化 哨兵原理 哨兵是一个集群来确保哨兵不出现问题。 服务状态监控 选举…

排序算法 -快速排序

文章目录 1. 快速排序&#xff08;Quick Sort&#xff09;1.1、 简介1.2、 快速排序的步骤 2. Hoare 版本2.1、 基本思路1. 分区&#xff08;Partition&#xff09;2. 基准选择&#xff08;Pivot Selection&#xff09;3. 递归排序&#xff08;Recursive Sorting&#xff09; 2…

01、Spring MVC入门程序

概述&#xff1a; MVC(M&#xff1a;模型、V&#xff1a;视图、 C&#xff1a;控制器) 三层架构&#xff1a; 表现层&#xff08;Web层&#xff09;业务层&#xff08;Service层&#xff09;负责业务逻辑处理持久层&#xff08;Dao层&#xff09;负责和数据库交互 Spring MVC 作…

7.揭秘C语言输入输出内幕:printf与scanf的深度剖析

揭秘C语言输入输出内幕&#xff1a;printf与scanf的深度剖析 C语言往期系列文章目录 往期回顾&#xff1a; VS 2022 社区版C语言的安装教程&#xff0c;不要再卡在下载0B/s啦C语言入门&#xff1a;解锁基础概念&#xff0c;动手实现首个C程序C语言概念之旅&#xff1a;解锁关…

Android Osmdroid + 天地图 (一)

Osmdroid 天地图 前言正文一、配置build.gradle二、配置AndroidManifest.xml三、获取天地图的API Key① 获取开发版SHA1② 获取发布版SHA1 四、请求权限五、显示地图六、源码 前言 Osmdroid是一款完全开源的地图基本操作SDK&#xff0c;我们可以通过这个SDK去加一些地图API&am…

️️一篇快速上手 AJAX 异步前后端交互

AJAX 1. AJAX1.1 AJAX 简介1.2 AJAX 优缺点1.3 AJAX 前后端准备1.4 AJAX 请求基本操作1.5 AJAX 发送 POST 请求1.6 设置请求头1.7 响应 JSON 数据1.8 AJAX 请求超时与网络异常处理1.9 取消请求1.10 Fetch 发送 Ajax 请求 2. jQuery-Ajax2.1 jQuery 发送 Ajax 请求&#xff08;G…

2024年11月16日 星期六 重新整理Go技术

今日格言 坚持每天进步一点点~ 一个人也可以是一个团队~ 学习全栈开发, 做自己喜欢的产品~~ 简介 大家好, 我是张大鹏, 今天是2024年11月16日星期六, 很高兴在这里给大家分享技术. 今天又是休息的一天, 做了很多的思考, 整理了自己掌握的技术, 比如Java, Python, Golang,…

炼码LintCode--数据库题库(级别:简单;数量:55道)--刷题笔记_02

目录 炼码LintCode--数据库题库&#xff08;级别&#xff1a;简单&#xff1b;数量&#xff1a;55道&#xff09;--刷题笔记_023618 耗时前三的任务&#xff08;日期差&#xff09;题&#xff1a;sql&#xff1a;解释&#xff1a;DATEDIFF 天数差order by 别名TIMESTAMPDIFF 月…

洛谷刷题日记||基础篇8

#include <iostream> #include <vector> using namespace std;int N, M; // N为行数&#xff0c;M为列数 vector<vector<char>> field; // 表示田地的网格&#xff0c;每个元素是W或. vector<vector<bool>> visited; // 用来记录网格是否访…