thinkphp学习 -- 初识tp

0x01 目录结构

├─application      应用目录
│ ├─common         公共模块目录(可以更改)
│ ├─module_name    模块目录
│ │ ├─config.php   模块配置文件
│ │ ├─common.php   模块函数文件
│ │ ├─controller   控制器目录
│ │ ├─model        模型目录
│ │ ├─view         视图目录
│ │ └─ ...         更多类库目录
│ │
│ ├─command.php    命令行工具配置文件
│ ├─common.php     公共函数文件
│ ├─config.php     公共配置文件
│ ├─route.php      路由配置文件
│ ├─tags.php       应用行为扩展定义文件
│ └─database.php   数据库配置文件
│
├─public           WEB目录(对外访问目录)
│ ├─index.php      入口文件
│ ├─router.php     快速测试文件
│ └─.htaccess      用于apache的重写
│
├─thinkphp         框架系统目录
│ ├─lang           语言文件目录
│ ├─library        框架类库目录
│ │ ├─think        Think类库包目录
│ │ └─traits       系统Trait目录
│ │
│ ├─tpl            系统模板目录
│ ├─base.php       基础定义文件
│ ├─console.php    控制台入口文件
│ ├─convention.php 框架惯例配置文件
│ ├─helper.php     助手函数文件
│ ├─phpunit.xml    phpunit配置文件
│ └─start.php      框架入口文件
│
├─extend           扩展类库目录
├─runtime          应用的运行时目录(可写,可定制)
├─vendor           第三方类库目录(Composer依赖库)
├─build.php        自动生成定义文件(参考)
├─composer.json    composer 定义文件
├─LICENSE.txt      授权说明文件
├─README.md        README 文件
├─think            命令行入口文件

0x02 url解析

http://servername/index.php/模块/控制器/操作/参数/值

  • 模块 : application目录下的目录
  • 控制器:目录下的controller 首字母必须大写
  • 操作:控制器下的方法

结构如下

thinkphp学习 -- 初识tp

thinkphp学习 -- 初识tp

自定义一个简单测试

thinkphp学习 -- 初识tp

url模式

在没有开启重写模式下

http://127.0.0.1/tp5.1/public/index.php?s=test/test1/eat

开启重写模式

apache:在 httpd.conf 中开启 mod_rewrite.so

thinkphp学习 -- 初识tp

http://127.0.0.1/tp5.1/public/index.php?s=test/test1/eat http://127.0.0.1/tp5.1/public/index.php/test/test1/eat

修改 index.php 同级目录 .htaccess文件

<IfModule mod_rewrite.c>
  Options +FollowSymlinks -Multiviews
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]
</IfModule>

http://127.0.0.1/tp5.1/public/index.php?s=test/test1/eat http://127.0.0.1/tp5.1/public/index.php/test/test1/eat http://127.0.0.1/tp5.1/public/test/test1/eat/

0x03 模块

│ ├─module_name    模块目录
│ │ ├─config.php   模块配置文件
│ │ ├─common.php   模块函数文件
│ │ ├─controller   控制器目录
│ │ ├─model        模型目录
│ │ ├─view         视图目录
│ │ └─ ...         更多类库目录

模块下类库文件命名:app\模块名 eg:app\index\controller\Index

绑定模块

在只有test一个模块时,可以将其绑定,省略写法。可在 public/index.php 追加写法

默认格式:Container::get('app')->run()->send();

修改为:Container::get('app')->bind('test')->run()->send();

thinkphp学习 -- 初识tp

只有一个控制器同理 Container::get('app')->bind('test/test1')->run()->send();

空模块

'empty_module' => '', // 默认的空模块名 当模块名为空时跳到设置模块

单一模块

'app_multi_module' => false, //是否支持多模块 不支持时只能使用一个模块并且直接跳转

环境变量

类库 Env 来获取环境变量

use think\facade\Env;

thinkphp学习 -- 初识tp

thinkphp学习 -- 初识tp

0x04 控制器定义

当类名为大小写 如 HelloWorld 应该以hello_world访问 url不区分大小写

thinkphp学习 -- 初识tp

'app_debug' => true, 开启debug

自定义命名空间

在根目录下创建.env 文件 如果想想更改app为其他

在 .env文件中写入 app_namespace=application;

继承

可以继承控制器中的类,也可以进行重写

如Controller中的 initialize() 在访问控制器的时候就会执行

thinkphp学习 -- 初识tp

0x05 控制器操作

前置操作

继承 Controller 类后可以使用 $beforeActionList 属性来创建前置操作

<?php
namespace app\test\controller;
use think\Controller;

class Before extends Controller {
    protected $beforeActionList = [
        'first',
        'second' => ['except' => 'one'],
        'third' => ['only' => 'one,two']
    ];

    protected function first(){
        echo 'first ';
    }

    protected function second(){
        echo 'second ';
    }

    protected function third(){
        echo 'third ';
    }

    public function index(){
        return 'index ';
    }


    public function one(){
        return 'one ';
    }

    public function two(){
        return 'two ';
    }
}

thinkphp学习 -- 初识tp

跳转和重定向

Controller 类提供了两个跳转的方法,success(msg,url)和 error(msg)

    public function index(){
        if ($this->flag == true){
            $this->success('登录成功!', '../index');
        } else{
            $this->error('登录失败');
        }
    }

默认固定模板 thinkphp/tpl/dispatch_jump.tpl

thinkphp学习 -- 初识tp

可以在app.php配置文件中更改个性化跳转页面

'dispatch_success_tmpl' => Env::get('think_path') .
'tpl/dispatch_jump.tpl',
'dispatch_error_tmpl' => Env::get('think_path') .
'tpl/dispatch_jump.tpl',

空方法

当方法为空时 可使用 _empty

    public function _empty($name){
        return '方法'.$name.'不存在';
    }

thinkphp学习 -- 初识tp

空控制器

当访问了一个不存在的控制器时,系统也会报错,使用 Error 类来拦截 在Controller新建Error.php

<?php
namespace app\test\controller;
use think\Request;
use think\response\Redirect;
class Error
{
    public function index(Request $r){
        return '控制器 '.$r->controller().' 不存在';
    }
}

thinkphp学习 -- 初识tp

上一篇:使用php加phpexcel类库将数据导出到表格


下一篇:Thinkphp高仿《拼多多拼团》商城系统源码 可封装APP 完美运营级