thinkphp5

    xiaoxiao2023-10-11  183

    决定写这个 微信小程序 + thinkphp5 商城

    为期末的php做准备

    这里使用的是最新版本的thinphp 6.0

    基础

    这里为学习使用thinkphp6

    调试修改

    目录结构

    www WEB部署目录(或者子目录) ├─app 应用目录 │ ├─controller 控制器目录 │ ├─model 模型目录 │ ├─view 视图目录 │ ├─ ... 更多类库目录 │ │ │ ├─command.php 命令行定义文件 │ ├─common.php 公共函数文件 │ └─event.php 事件定义文件 │ ├─config 配置目录 │ ├─app.php 应用配置 │ ├─cache.php 缓存配置 │ ├─cookie.php Cookie配置 │ ├─database.php 数据库配置 │ ├─log.php 日志配置 │ ├─route.php 路由和URL配置 │ ├─session.php Session配置 │ ├─template.php 模板引擎配置 │ └─trace.php Trace配置 │ ├─route 路由定义目录 │ ├─route.php 路由定义文件 │ └─ ... │ ├─public WEB目录(对外访问目录) │ ├─index.php 入口文件 │ ├─router.php 快速测试文件 │ └─.htaccess 用于apache的重写 │ ├─extend 扩展类库目录 ├─runtime 应用的运行时目录(可写,可定制) ├─vendor 第三方类库目录(Composer依赖库) ├─build.php 自动生成定义文件(参考) ├─composer.json composer 定义文件 ├─LICENSE.txt 授权说明文件 ├─README.md README 文件 ├─think 命令行入口文件 复制 多应用模式 如果你需要一个多应用的项目架构,目录结构可以参考下面的结构进行调整(关于配置文件的详细结构参考后面章节)。 www WEB部署目录(或者子目录) ├─app 应用目录 │ ├─app_name 应用目录 │ │ ├─common.php 函数文件 │ │ ├─controller 控制器目录 │ │ ├─model 模型目录 │ │ ├─view 视图目录 │ │ └─ ... 更多类库目录 │ │ │ ├─command.php 命令行定义文件 │ ├─common.php 公共函数文件 │ └─event.php 事件定义文件 │ ├─config 应用配置目录 │ ├─app_name 应用配置目录 │ │ ├─database.php 数据库配置 │ │ ├─cache 缓存配置 │ │ └─ ... │ │ │ ├─app.php 应用配置 │ ├─cache.php 缓存配置 │ ├─cookie.php Cookie配置 │ ├─database.php 数据库配置 │ ├─log.php 日志配置 │ ├─route.php 路由和URL配置 │ ├─session.php Session配置 │ ├─template.php 模板引擎配置 │ └─trace.php Trace配置 │ ├─route 路由定义目录 │ ├─app_name 应用路由目录 │ │ ├─route.php 路由定义文件 │ │ └─ ... │ ├─public WEB目录(对外访问目录) │ ├─index.php 入口文件 │ ├─router.php 快速测试文件 │ └─.htaccess 用于apache的重写 │ ├─extend 扩展类库目录 ├─runtime 应用的运行时目录(可写,可定制) ├─vendor 第三方类库目录(Composer依赖库) ├─build.php 自动生成定义文件(参考) ├─composer.json composer 定义文件 ├─LICENSE.txt 授权说明文件 ├─README.md README 文件 ├─think 命令行入口文件

    入口文件

    默认的入口文件在

    public/index.php

    使用自动的多应用部署

    修改入口文件为下

    <?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK ] // +---------------------------------------------------------------------- // | Copyright (c) 2006-2018 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: liu21st <liu21st@gmail.com> // +---------------------------------------------------------------------- // [ 应用入口文件 ] namespace think; require __DIR__ . '/../vendor/autoload.php'; // 执行HTTP应用并响应 $http = (new App())->http; $response = $http->name("index")->run(); $response->send(); $http->end($response);

    此时目录结构如下

    编写控制器

    <?php namespace app\index\controller; class Index { public function Index(){ return "ming"; } }

    此时访问 http://localhost:8082/index.php/

    可以看到访问到应用为index的应用

    URL规则

    http://serverName/index.php/应用/控制器/操作/参数/值…

    容器和依赖注入

    通过对类的依赖进行自动注入

    对象依赖通过依赖注入生成

    使用助手函数绑定

    <?php namespace app\index\controller; use app\index\model\User; class Index { private $user; public function _construct(User $user){ $this->user = $user; } public function Index(){ $app = app(); isset($app->User); $app->user = User::class; $user = $app -> user; return "ming" . var_dump($cache); } }

    这里使用app函数对对象实例进行注册。。

    系统服务

    执行框架依赖的组件需要的基础服务

    服务会继承thinkphp的think\Service命名空间下的类 使用命令生成 php think make:service FileSystemService 生成一个系统服务

    该系统服务会继承系统的think\Service类

    生成两个空方法 register 和 boot

    register 方法,服务绑定到容器

    使用命令生成系统服务

    php think make:service FileSystemService

    <?php namespace app\service; use think\Service; class FileSystemService extends Service { public function register() { } public function boot() { } }

    可以发现注册到app\service命名空间 使用think\Service

    Facade

    这里是门面

    门面为容器中的动态的类,提供静态调用接口。用来进行可测试和扩展。。

    <?php namespace app\common; class Test { public function hello($name){ return 'hello' . $name; } }

    此时会产生一个hello类

    调用hello类的方法

    正常的调用

    <?php namespace app\index\controller; use app\index\model\User; class Index { private $user; public function _construct(User $user){ $this->user = $user; } public function Index(){ $test = new \app\common\Test(); echo $test ->hello('thinkphp'); return "ming"; } }

    此时使用代理类

    <?php namespace app\index\controller; use app\index\model\User; class Index { private $user; public function _construct(User $user){ $this->user = $user; } public function Index(){ echo \app\common\facade\Test::hello("ming"); return "ming"; } }

    即无需实例化,直接使用工厂模式,进行生成实例化对象

    无需实例化就可以调用

    中间件

    ➜ untitled11 php think make:middleware Check Middleware:app\middleware\Check created successfully. ➜ untitled11

    使用命令行生成中间件

    此时的目录结构

    可以看到生成了Check中间件

    <?php namespace app\middleware; class Check { /** * 中间件入口 * @param $request * @param \Closure $next * @return mixed|\think\response\Redirect */ public function handle($request, \Closure $next) { if($request->param('name') == 'think'){ // 请求转发到index页面的think return redirect('index/think'); } // 继续转发下一个中间件 return $next($request); } }

    注册中间件 对路由中间件进行注册

    Route::rule('hello/:name','hello') ->middleware(\app\middleware\Auth::class);

    可以进行注册

    事件

    支持订阅者和发布者模式

    事件的存在的意义是对修改关闭,对增加开发 减少对代码的入侵

    所有的事件通过 think\facade\Event 类进行调用

    即观察者模式

    使用助手函数 或者使用Event::trigger注册事件

    <?php namespace app\index\controller; use app\index\model\User; class Index { public function Index(){ // 触发UserLogin事件 使用助手函数 event('UserLogin'); return "ming"; } }

    使用事件类 输入命令 生成事件类

    php think make:event UserLogin
    最新回复(0)