当前位置:首页 > php > ThinkPHP5.2第一个Beta版本发布测试

ThinkPHP5.2第一个Beta版本发布测试

转载自:ThinkPHP官方博客 2018-11-06 php 1916
分享给朋友:

介绍

5.2版本的第一个Beta1测试版本发布,仅供学习和测试用途,暂时请不要用于实际项目。

5.2的目标致力于提供一个更简洁、更标准的核心框架,对于一些非必须功能力求组件化或者通过扩展解决。

目前已经完成的主要特性包括:

  • 基于PHP7.1+重构;

  • 强类型严格约束;

  • 完全依赖composer;

  • 原生多应用支持;

  • 支持应用的Composer引入;

  • 引入事件系统;

  • 增加PSR-6和PSR-16支持;

目前核心功能基于PHP7.1实现,未来的升级版本不排除要求PHP7.2+的可能性。

安装

composer create-project topthink/think tp5 5.2.*-dev

启动服务

cd tp5
php think run

然后就可以在浏览器中访问

http://localhost:8000

如果需要更新框架使用

composer update topthink/framework

目录结构

相对于5.1来说,5.2版本目录结构的变化不大,主要是默认应用目录改为app,thinkphp目录不再放置根目录而是直接安装到vendor目录下。

www  WEB部署目录(或者子目录)
├─app 应用目录
│  ├─command.php        命令行定义文件
│  ├─common.php         公共函数文件
│  ├─event.php          事件定义文件
│  ├─controller         控制器目录
│  ├─model              模型目录
│  ├─view               视图目录
│  └─ ...               更多类库目录
├─config                应用配置目录
├─route                 路由定义目录
├─public                WEB目录(对外访问目录)
│  ├─index.php          入口文件
│  ├─router.php         快速测试文件
│  └─.htaccess          用于apache的重写
├─extend                扩展类库目录
├─runtime               应用的运行时目录
├─vendor                第三方类库目录(Composer依赖库)
├─composer.json         composer 定义文件
├─LICENSE.txt           授权说明文件
├─README.md             README 文件
├─think                 命令行入口文件

该目录结构只是默认生成的(单应用模式),具体会因为你是否采用多应用模式而存在差异。

入口文件

由于5.2版本完全依赖Composer,取消了原本的think\Loader类,因此入口文件的写法有所调整。

系统安装后提供了一个默认的入口文件(位于public/index.php),内容如下:

// [ 应用入口文件 ]namespace think;require __DIR__ . '/../vendor/autoload.php';// 执行应用并响应(new App())->run()->send();

如果app目录下面直接是controller、model以及view等类库目录,则为单应用模式(默认模式),如果在app目录下创建了应用子目录,则自动变成多应用模式。

单应用和多应用的目录结构区别如下(主要在app目录):

单应用

├─app 应用目录
│  ├─controller         控制器目录
│  ├─model              模型目录
│  ├─view               视图目录
│  └─ ...               更多类库目录
├─public                WEB目录(对外访问目录)
│  ├─index.php          入口文件
├─config                应用配置目录
├─route                 路由定义目录
├─runtime               应用的运行时目录

多应用

├─app 应用目录
│  ├─index              主应用
│  │  ├─controller      控制器目录
│  │  ├─model           模型目录
│  │  ├─view            视图目录
│  │  ├─config          配置目录(优先)
│  │  └─ ...            更多类库目录
│  ├─app2               应用2│  │  ├─controller      控制器目录
│  │  ├─model           模型目录
│  │  ├─view            视图目录
│  │  ├─config          配置目录(优先)
│  │  └─ ...            更多类库目录
├─public                WEB目录(对外访问目录)
│  ├─index.php          主入口文件
│  ├─app2.php           入口文件2├─config                应用配置目录
│  ├─index              index应用配置
│  └─app2               app2应用配置
├─route                 路由定义目录
│  ├─index              index应用路由定义目录
│  └─app2               app2应用路由定义目录
├─runtime               应用的运行时目录
│  ├─index              index应用运行时目录
│  └─app2               app2应用运行时目录

从目录结构可以看出来,每个应用相对保持独立,并且每个应用都有一个对应的入口文件,应用下面还可以通过多级控制器来维护控制器分组。

通过URL重写可以实现在一个统一的入口文件访问不同的应用。

新版的think\App类的定制性更灵活,你可以在入口文件中对应用进行定制。

// [ 应用入口文件 ]namespace think;require __DIR__ . '/../vendor/autoload.php';// 实例化应用$app = new App();// 设置当前应用的路径$app->path('path/to/name');// 开发调试模式$app->debug(true);// 设置应用名称$app->name('name');// 设置应用的命名空间$app->setNamespace('app\name');// 开启应用类库后缀$app->suffix(true);// 绑定当前应用的请求对象$app->bind('request', $request);// 执行应用并输出响应$app->run()->send();

如果你的某个应用来自于composer库,只需要在入口文件中指定应用的命名空间。

命令行

如果采用了多应用模式,命令行可以支持生成不同应用的类文件

php think make:controller index@User
php think make:model app2@Blog

Db类和模型

Db类也采用了Facade机制,所以你在使用Db类查询的时候,应该使用:

use think\facade\Db;...Db::name('user')->find();

模型的用法目前基本上变化不大。

事件机制

事件机制用于替代5.1版本的Hook和行为,可以通过命令行生成事件类。

php think make:event  index@User
namespace app\index\event;class UserLogin{}

生成监听器

php think make:listener index@UserLogin
namespace app\index\listener;class UserLogin{
    public function handle($event)
    {
        // 事件监听处理
    }   }

给事件绑定别名

Event::bind('UserLogin', '\app\index\event\UserLogin');

使用监听器

Event::listen('UserLogin', '\app\index\listener\UserLogin');

或者手动注册事件监听

use think\facade\Event;Event::listen('UserLogin', function(){});

生成事件订阅类

php think make:subscribe index@User
namespace app\index\subscribe;class User{
    public function onUserLogin($event)
    {
        // 事件响应处理
    }}

注册事件订阅者

Event::subscribe('\app\index\subscribe\User');

上面的相关操作可以通过在应用目录的event.php文件中直接配置,而无需手动操作。

return [
    'bind'    =>    [
        'UserLogin'    =>    ['\app\index\event\UserLogin'],
        // 更多事件别名定义
    ],
    'listen'    =>    [
        'UserLogin'    =>    ['\app\index\listener\UserLogin'],
        // 更多事件监听
    ],
    'subscribe'    =>    [
       '\app\index\subscribe\User',
        // 更多事件订阅
    ],];

内置已经绑定别名的事件包括AppInit、AppBegin、ActionBegin、AppEnd等,也就是说原来的Hook钩子已经全部改造为事件类。

废弃用法

  • 模块概念(应用下不再有模块的概念,用多级控制器替代);

  • Hook和行为系统(使用事件系统替代);

  • 路由的数组返回定义(统一使用方法定义路由);

  • Session的前缀机制(已经被简化);

  • Config的range机制(已经被简化);

  • 核心Facade类的别名(避免混淆而废弃);


分享给朋友:

相关文章

webman自定义进程

1、新建文件 process/Rpc.php 编写rpc进程<?php namespace process; use Workerman\Connection\TcpConnection; class Rpc {    &n

在PHP7+下监控Memcached服务、性能、扇区等信息

PHPMemcachedAdmin:一款网页可视化的Memcached工具

Swoole的PHP协程开发框架 imi 集成ThinkPHP模板引擎 think-template

在 imi 框架根目录中执行composer require topthink/think-template安装好模板引擎后,找到路径\vendor\topthink\think-template\src\Template.php找到 fetch() 渲染模板文件的方法,将最后一

PHP7下MongoDB自增或自减一个字段的值

findAndModify属于原子操作模型数据,所谓原子操作就是要么这个文档保存到Mongodb,要么没有保存到Mongodb,不会出现查询到的文档没有保存完整的情况。

PHP的面向对象解析

早期编程由于受电脑硬件限制,程序都是追求效率,而忽略可理解性,扩充性,随着硬件技术的发展,编程越来越重视多人开发,程序员越来越重视程序的可靠性,可扩展性,可维护性,所以刺激了程序语言的发展

ThinkPHP6.0使用EasyTask常驻内存多进程任务管理

PHP常驻内存的多进程任务管理器Composer包。以进程管理为出发点,同时也支持为每个进程设置定时执行功能,您可以用它来完成需要重复运行的任务(如订单超时自动取消,短信邮件异步推送,队列/消费者/频道订阅者等等),甚至处理计划任务。

PHP8新特性盘点

PHP 8.0.0 已经正式发布了,这个对于PHPer无疑是一个令人振奋的消息。它包含了很多新功能与优化项, 包括命名参数、联合类型、注解、构造器属性提升、match表达式、nullsafe运算符、JIT,并改进了类型系统、错误处理、语法一致性。

PHP8新特性系列:构造器属性提升使用及注意事项

本篇主要说下PHP8构造器属性提升的用法,这个特性对于一些需要在构造器中设置或初始化一些类属性的时候非常有用(包括public、protected和private),比如在PHP7中你可以这样定义一个类的属性,然后在构造方法中传值。class Point {  &nb

ThinkPHP6.0在PHP8下报错解决方法

PHP8下全新安装ThinkPHP6.0.X出现报错,如下Deprecated: Method ReflectionParameter::getClass() is deprecated in xxxx\vendor\topthink\fr

MongoDB驱动聚合查询aggregate在分组分页排序后出现的数据混乱问题

最近在获取MongoDB数据时需要把重复的数据分组来排序,语言版本:PHP7