ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

thinkphp学习 -- 初识tp

2021-04-08 12:04:11  阅读:192  来源: 互联网

标签:index -- app tp public 模块 thinkphp php 目录


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 首字母必须大写
  • 操作:控制器下的方法

结构如下

image-20210406110708666

image-20210406110803263

自定义一个简单测试

image-20210406113747482

url模式

在没有开启重写模式下

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

开启重写模式

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

image-20210406141308478

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

image-20210406144231861

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

空模块

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

单一模块

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

环境变量

类库 Env 来获取环境变量

use think\facade\Env;

image-20210406153313027

image-20210406153504706

0x04 控制器定义

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

image-20210406162049007

'app_debug' => true, 开启debug

自定义命名空间

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

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

继承

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

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

image-20210406165322416

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 ';
    }
}

image-20210406173607862

跳转和重定向

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

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

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

image-20210407101242393

可以在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.'不存在';
    }

image-20210407101619177

空控制器

当访问了一个不存在的控制器时,系统也会报错,使用 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().' 不存在';
    }
}

image-20210407110625792

标签:index,--,app,tp,public,模块,thinkphp,php,目录
来源: https://www.cnblogs.com/th0r/p/14631506.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有