thinkphp5 一

栏目: PHP · 发布时间: 5年前

内容简介:决定写这个 微信小程序 + thinkphp5 商城为期末的php做准备这里使用的是最新版本的thinphp 6.0

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

为期末的 php 做准备

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

基础

这里为学习使用thinkphp6

调试修改

thinkphp5 一

目录结构

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);

此时目录结构如下

thinkphp5 一

编写控制器

<?php
namespace app\index\controller;


class Index
{
    public function Index(){
        return "ming";
    }

}

可以看到访问到应用为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

thinkphp5 一

<?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

使用命令行生成中间件

此时的目录结构

thinkphp5 一

可以看到生成了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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

GOOGLE HACKS

GOOGLE HACKS

Rael Dornfest、Tara Calishain / 卞军、谢伟华、朱炜 / 电子工业 / 2006-1 / 49.00元

GOOGLE HACKS巧妙使用网络搜索的技巧和工具(第二版)一起来看看 《GOOGLE HACKS》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

html转js在线工具
html转js在线工具

html转js在线工具