【Thinkphp 6】框架基础知识

简介: 【Thinkphp 6】框架基础知识

环境搭建

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
composer create-project topthink/think tp
php think run

框架基础规则

继承引入

use app\BaseController;
class coleak extends BaseController

use进行引入,然后继承基础的方法

单应用模式

入口文件(index.php)可以省略

http://localhost:8000/coleak/test
http://localhost:8000/index.php/coleak/test

多应用模式

composer require topthink/think-multi-app

在app里新建文件夹,并将相应的控制器(controller)放到新建的文件夹下

遵守类名和文件名一致,空间名和文件夹名一致

namespace app\cc\controller;
http://localhost:8000/cc/coleak/test

自定义路由

http://localhost:8000/coleak/hello/a

调试器

重命名为 .env

public function c()
    {
        $arr=['id'=>1,"name"=>"coleak"];
        $name='coleak';
//        return "666".'21a1';
//        return json($arr);
//        dump($arr);
//        dump($name);
//        halt终止程序并输出dunp
//        halt($arr);
//        halt($name);
//
//        trace调试器中输出
        trace($arr);
        trace($name);
//        dump($ar);
    }

空控制器

在controller下面定义个Error.php

<?php
namespace app\cc\controller;
class Error{
    public function __call($name, $arguments)
    {
        // TODO: Implement __call() method.
        return "Error Requests!";
    }
}

视图

模板引擎安装

composer require topthink/think-view

看下composer.json

"require": {
        "php": ">=7.2.5",
        "topthink/framework": "^6.1.0",
        "topthink/think-orm": "^2.0",
        "topthink/think-filesystem": "^1.0",
        "topthink/think-multi-app": "^1.0",
        "topthink/think-view": "^1.0"
    },

渲染模板

public function t()
    {
        return view(1);
    }
//如果html文件名和方法名一致,即为t.html。则无需参数
    public function t()
    {
        return view();
    }

facade代理

use think\facade\View;
    public function t()
    {
//        return view();
        return View::fetch();
    }
//或者直接使用(不推荐)
return \think\facade\View::fetch();

当方法使用驼峰命名法是,如testColeak,则对应的html文件应该为test_coleak

变量传递

view.php

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

语法

public function testColeak(){
        View::assign("name","coleak");
        View::assign("age",19);
        return View::fetch();
    }
{$name}
{$age}

查看编译后的文件

在runtime/cc/temp

发现进行了一个htmlentities处理,不让html标签解析,进行原样显示

让其解析则加一个|raw

{$name}
<br>
{$name|raw}
View::assign("name","<h1>coleak</h1>");
<?php echo htmlentities($name); ?>
<br>
<?php echo $name; ?>

默认值

{$a|default="coleak"}

数组按键取值

$arr=["name"=>"coleak","age"=>19];
View::assign("arr",$arr);
{$arr["name"]}-{$arr.age}

md5加密

{$arr["name"]|md5}-{:md5($arr.name)}

请求

request信息

//http://127.0.0.1:8000/cc/c/test  
public function test()
    {
//        dump(Request::method());
        dump($this->request->method());
        dump($this->request->ip());
        dump($this->request->host());
        dump($this->request->scheme());
        dump($this->request->url());
        dump($this->request->root());
        dump($this->request->baseUrl());
    }
^ "GET"
^ "127.0.0.1"
^ "127.0.0.1:8000"
^ "http"
^ "/cc/c/test"
^ "/cc"
^ "/cc/c/test"

参数接收

//http://127.0.0.1:8000/cc/c/server/b/2?a=45
    public function server()
    {
        dump($this->request->get());
        //pathinfo传参
//      /参数名1/参数值1/参数名2/参数值2...
        dump($this->request->route());
        //通用的
        dump($this->request->param());
    }

^ array:1 [▼

“a” => “45”

]

^ array:1 [▼

“b” => “2”

]

^ array:2 [▼

“a” => “45”

“b” => “2”

]

生成URL

public function url()
    {
        echo Route::buildUrl();
        echo "<br>";
        echo Route::buildUrl("coleak/testColeak",["name"=>"coleak","age"=>19]);
        echo "<br>";
        echo Route::buildUrl("coleak/testColeak",["name"=>"coleak","age"=>19])
        ->domain("www.baidu.com")
        ->suffix("phtml");
        echo "<br>";
        echo url("coleak/testColeak",["name"=>"coleak","age"=>19]);
    }
/cc/C/url.html
/cc/coleak/testColeak.html?name=coleak&age=19
http://www.baidu.com/cc/coleak/testColeak.phtml?name=coleak&age=19
/cc/coleak/testColeak.html?name=coleak&age=19

文件上传

上传及验证

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
<form action="" enctype="multipart/form-data" method="post">
    file:<input type="file" name="image">
    <br>
    <button>提交</button>
<!--    <input type="submit" value="upload">-->
</form>
</body>
</html>
<?php
namespace app\cc\controller;
use app\BaseController;
use think\facade\View;
use think\facade\Filesystem;
class Upload extends BaseController{
    public function upload(){
        if ($this->request->isPost())
        {
//            $file=$this->request->file("image");
//            dump($file);
            $file=$this->request->file();
            dump($file);
            $size=1000*1024;
            validate(["image"=>"image|fileSize:{$size}|fileExt:jpg"])
            ->check($file);
            $savefile=Filesystem::disk("public")->putfile("uploads",$file["image"]);
            dump($savefile);
            echo "successed";
        }else{
            return View::fetch();
        }
    }
}

验证功能

验证器

<?php
namespace app\validate;
use think\Validate;
class Student extends Validate{
    protected $rule=[
        'name'=>"require|chs|length:2,15",
        "age"=>'require|number|between:18,60'
    ];
    protected $message=[
      'name.require'=>"姓名为空",
        'age.require'=>"年龄为空",
        'name.chs'=>"姓名不为汉字",
        'name.length'=>"姓名长度错误",
        'age.number'=>"年龄不为数字",
        'age.between'=>"年龄不符合范围",
    ];
}
public function add(){
        $arr1=["name"=>"coleakxiao","age"=>19];
        $arr2=["name"=>"小1","age"=>19];
        $arr3=["name"=>"小","age"=>11];
        $arr4=["name"=>"小小小","age"=>22];
        $stu=new Student();
//        if(!$stu->check($arr1))
//        {
//            echo $stu->getError().PHP_EOL;
//        }
//        if(!$stu->check($arr4))
//        {
//            echo $stu->getError().PHP_EOL;
//        }
//        echo "successed".PHP_EOL;
//        validate(Student::class)->check($arr4);
//        validate(Student::class)->check($arr1);//验证失败会抛出异常
        //匿名函数形式验证方式
        validate(
            ['name'=>"require|chs|length:2,15"],
            ['name.require'=>"姓名为空", 'name.chs'=>"姓名不为汉字", 'name.length'=>"姓名长度错误",]
        )->check($arr4);
//scene定义场景验证,function自定义接口验证
        try {
//            echo $aaa;
            validate(Student::class)->check($arr4);
            validate(Student::class)->check($arr1);
        }catch(ValidateException $e)
        {
            echo $e->getMessage();
        }
        catch (\Exception $e)//两次捕获不同的异常,验证异常放在普通的异常捕获前面
        {
            echo $e->getMessage();
        }
    }

表单令牌

public function form(){
        if($this->request->isPost() and $this->request->checkToken("__token__"))
        {
//            $r1=$this->request->checkToken("__token__");
//            dump($r1);
            //或者直接在验证器里面设置 'name'=>"require|chs|length:2,15|token:__token__"
            dump($this->request->param());
        }
        else {
            return View::fetch();
        }
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post">
    <input type="hidden" name="__token__" value="{:token()}" />
  name:<input type="text" name="user">
    <br>
  <br>
  <button>提交</button>
</form>
</body>
</html>

中间件

php think make:middleware Check
middleware.php中修改
\app\middleware\Check::class
        public function handle($request, \Closure $next)
    {
        dump(111);
//        if ($request->param())
    return $next($request);
    }

杂项

session

开启session中间件 \think\middleware\SessionInit::class

class coleak extends BaseController
  {
    public function ss1(){
        Session::set("name","coleak");
        $arr=["name"=>"coleak1","age"=>19,"sex"=>"男"];
        Session::set("arr",$arr);
    }
    public function ss2()
    {
        dump(Session::get("arr"));
        Session::delete("name");
        dump(Session::has("name"));
        dump(Session::all());
        Session::clear();
        dump(Session::all());
    }

在config/session.php配置session相关的属性

Cookie

public function ss3()
    {
        Cookie::set("name","ayuexiao",3600);
        dump(Cookie::get("name"));
        Cookie::delete("name");
    }


目录
相关文章
|
3月前
|
缓存 安全 PHP
【PHP开发专栏】Symfony框架核心组件解析
【4月更文挑战第30天】本文介绍了Symfony框架,一个模块化且高性能的PHP框架,以其可扩展性和灵活性备受开发者青睐。文章分为三部分,首先概述了Symfony的历史、特点和版本。接着,详细解析了HttpFoundation(处理HTTP请求和响应)、Routing(映射HTTP请求到控制器)、DependencyInjection(管理依赖关系)、EventDispatcher(实现事件驱动编程)以及Security(处理安全和认证)等核心组件。
91 3
|
4天前
|
缓存 安全 PHP
深入浅出PHP框架:Laravel的优雅之旅
【8月更文挑战第15天】 探索PHP世界里的瑰宝,Laravel框架以其优雅、简洁著称。本文将带你领略Laravel的核心魅力,从安装到构建应用,再到高级特性的应用,让你轻松驾驭这个强大的工具。无论你是PHP新手还是资深开发者,这篇文章都将成为你理解并使用Laravel的指南针。
|
3月前
|
前端开发 JavaScript 测试技术
【PHP开发专栏】PHP Web开发基础与流程
【4月更文挑战第29天】本文介绍了PHP Web开发的基础和流程,帮助初学者入门。内容包括Web服务器与PHP解释器的工作原理、HTML/CSS/JavaScript基础知识、PHP语法与数据库操作。开发流程涵盖项目规划、环境搭建、数据库设计、代码编写、测试与调试,以及部署与维护。此外,文中还强调了使用框架、代码组织、安全性及性能优化等进阶知识和最佳实践,旨在培养优秀PHP开发者。
42 0
|
3月前
|
开发框架 数据可视化 前端开发
【Unity 3D】GameFramework、QFramework框架简介及应用实战(超详细 附源码)
【Unity 3D】GameFramework、QFramework框架简介及应用实战(超详细 附源码)
350 0
|
前端开发 API 数据库
C# Abp框架入门系列文章(一)(下)
C# Abp框架入门系列文章(一)(下)
413 0
|
SQL 开发框架 缓存
C# Abp框架入门系列文章(一)(上)
C# Abp框架入门系列文章(一)
299 0
|
安全 Java 关系型数据库
【web开发基础】php开发基础快速入门(1)-PHP介绍及开发环境快速安装和基本使用介绍
互联网时代,网站是一种非常重要的通讯工具,只要用户有网络和权限,随时随地可访问任意网页,个人可以通过网站发布自己的想要公开的资讯,或者利用网站提供相关的网络服务,企业网站,对于企业来说,是企业对外的窗口,是企业的名片。可通过网站宣传企业自身以及品牌的推广,甚至交流,产品的销售或提供服务工具。在飞速发展的时代,快速开发,快速部署,快速迭代也成了互联网软件行业一直追求的目标,毕竟机会稍纵即逝。而PHP最大好处在于开发部署快速,而且生态完善,社区活跃度高,类库丰
208 1
|
开发框架 移动开发 网络协议
php进阶编程-easyswoole框架的学习和开发
php进阶编程-easyswoole框架的学习和开发
148 0
php进阶编程-easyswoole框架的学习和开发
|
SQL 前端开发 程序员
Laravel和Thinkphp有什么区别,哪个框架好用
Laravel和Thinkphp有什么区别,哪个框架好用
721 0
|
NoSQL JavaScript 中间件
知新 | koa框架入门到熟练第二章
这里对koa-bodyparser的使用教程。
553 0