├─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 命令行入口文件
http://servername/index.php/模块/控制器/操作/参数/值
结构如下
自定义一个简单测试
在没有开启重写模式下
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/
│ ├─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;
当类名为大小写 如 HelloWorld 应该以hello_world访问 url不区分大小写
'app_debug' => true,
开启debug
在根目录下创建.env 文件 如果想想更改app为其他
在 .env文件中写入 app_namespace=application;
可以继承控制器中的类,也可以进行重写
如Controller中的 initialize() 在访问控制器的时候就会执行
继承 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().' 不存在'; } }