thinkphp学习 -- 初识tp
2021/4/8 12:08:30
本文主要是介绍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 首字母必须大写
- 操作:控制器下的方法
结构如下
自定义一个简单测试
url模式
在没有开启重写模式下
http://127.0.0.1/tp5.1/public/index.php?s=test/test1/eat
开启重写模式
apache:在 httpd.conf
中开启 mod_rewrite.so
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();
只有一个控制器同理 Container::get('app')->bind('test/test1')->run()->send();
空模块
'empty_module' => '', // 默认的空模块名
当模块名为空时跳到设置模块
单一模块
'app_multi_module' => false, //是否支持多模块
不支持时只能使用一个模块并且直接跳转
环境变量
类库 Env 来获取环境变量
use think\facade\Env;
0x04 控制器定义
当类名为大小写 如 HelloWorld 应该以hello_world访问 url不区分大小写
'app_debug' => true,
开启debug
自定义命名空间
在根目录下创建.env 文件 如果想想更改app为其他
在 .env文件中写入 app_namespace=application;
继承
可以继承控制器中的类,也可以进行重写
如Controller中的 initialize() 在访问控制器的时候就会执行
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 '; } }
跳转和重定向
Controller 类提供了两个跳转的方法,success(msg,url)和 error(msg)
public function index(){ if ($this->flag == true){ $this->success('登录成功!', '../index'); } else{ $this->error('登录失败'); } }
默认固定模板 thinkphp/tpl/dispatch_jump.tpl
可以在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.'不存在'; }
空控制器
当访问了一个不存在的控制器时,系统也会报错,使用 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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23怎么实现安卓+php 热更新方案?-icode9专业技术文章分享
- 2024-11-22PHP 中怎么实现判断多个值是否为空、null 或者为 false?-icode9专业技术文章分享
- 2024-11-11开源 PHP 商城项目 CRMEB 二次开发和部署教程
- 2024-11-09怎么使用php在kaufland平台刊登商品?-icode9专业技术文章分享
- 2024-11-05PHP的抽象类和接口是什么,有什么区别-icode9专业技术文章分享
- 2024-11-01开源 PHP 商城项目 CRMEB 安装和使用教程
- 2024-11-01用php和mysql写无限分类,有哪几种方法-icode9专业技术文章分享
- 2024-10-31php数据分表导出时部分数据无法导出什么原因-icode9专业技术文章分享
- 2024-10-30有经验的 PHP 开发者学习一门新的编程语言,有哪些推荐的有前景的语言-icode9专业技术文章分享
- 2024-10-21php 检测图片是否篡改过-icode9专业技术文章分享