ThinkPHP是一个快速、简单的基于MVC和面向对象的轻量级PHP开发框架,自2006年诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简代码的同时,尤其注重开发体验和易用性,并且拥有众多的原创功能和特性,为WEB应用和API开发提供了强有力的支持。下面我就重点介绍ThinkPHP5新手需要配置的地方

1、入口文件

ThinkPHP5.0版本的默认自带的入口文件位于public/index.php(实际部署的时候public目录为你的应用对外访问目录)

2、资源访问

网站的资源文件访问不会影响正常的操作访问,只有当访问的资源文件不存在的时候才会解析到入口文件,一般就会提示模块不存在的错误。网站的资源文件一般放入public目录的子目录下面,例如下面是一个建议规范:

public
├─index.php 应用入口文件
├─static 静态资源目录
│ ├─css 样式目录
│ ├─js 脚本目录
│ └─img 图像目录

记住,千万不要在public目录之外的任何位置放置资源文件,包括application目录。

访问资源文件的URL路径是:

http://tp5.com/static/css/style.css
http://tp5.com/static/js/common.js
http://tp5.com/static/img/picture.jpg

当然,你也可以更改资源文件的URL路径,在config.php中配置如下:

// 视图输出字符串内容替换
'view_replace_str' => [
'__static__' => '/static'
],

访问资源文件的改变后URL路径是:

<link href="__static__/css/bootstrap.css" rel="stylesheet">

3、调试模式

ThinkPHP支持调试模式,默认情况下是开启状态(5.0.10+版本开始,默认关闭调试模式,需要自己开启)。调试模式以除错方便优先,而且在异常的时候可以显示尽可能多的信息,所以对性能有一定的影响。调试模式不支持模块单独开启,只能应用全局开启)

开发完成后,我们实际进行项目部署的时候,修改应用配置文件(application/config.php)中的app_debug配置参数:

// 关闭调试模式
'app_debug' => false,

为了安全考虑,避免泄露你的服务器WEB目录信息等资料,一定记得正式部署的时候关闭调试模式。

4、控制器

如果要访问一个驼峰命名的控制器,例如我们把上面的例子改成一个HelloWorld控制器。

<?php
namespace app\index\controller;
class HelloWorld
{
public function index($name = 'World')
{
return 'Hello,' . $name . '!';
}
}

默认情况下正确的方法是使用下面的URL进行访问

http://tp5.com/index.php/index/hello_world

下面的访问地址是错误的

http://tp5.com/index.php/index/HelloWorld

当然也可以区分大小写访问,在config.php文件中,设置了关闭url自动转换如下

'url_convert' => false,

5、URL访问

ThinkPHP采用单一入口模式访问应用,对应用的所有请求都定向到应用的入口文件,系统会从URL参数中解析当前请求的模块、控制器和操作,下面是一个标准的URL访问格式:

http://domainName/index.php/模块/控制器/操作

模块在ThinkPHP中的概念其实就是应用目录下面的子目录,而官方的规范是目录名小写,因此模块全部采用小写命名,无论URL是否开启大小写转换,模块名都会强制小写。

应用的index模块的Index控制器定义如下:

<?php

namespace app\index\controller;

class Index
{
public function index()
{
return 'index';
} public function hello($name = 'World')
{
return 'Hello,' . $name . '!';
}
}

如果我们直接访问入口文件的话,由于URL中没有模块、控制器和操作,因此系统会访问默认模块(index)下面的默认控制器(Index)的默认操作(index),因此下面的访问是等效的:

http://tp5.com/index.php
http://tp5.com/index.php/index/index/index

如果要访问控制器的hello方法,则需要使用完整的URL地址

http://tp5.com/index.php/index/index/hello

6、隐藏入口

可以去掉URL地址里面的入口文件index.php,但是需要额外配置WEB服务器的重写规则。

Apache为例,需要在public下的同级添加.htaccess文件(官方默认自带了该文件),内容如下:

<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

如果用的phpStudy,规则如下:

<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
</IfModule>

接下来就可以使用下面的URL地址访问了

http://tp5.com/index/index/index
http://tp5.com/index/index/hello

7、根命名空间(类库包)

根命名空间是一个关键的概念,以上面的\think\cache\driver\File类为例,think就是一个根命名空间,其对应的初始命名空间目录就是系统的类库目录(thinkphp/library/think),我们可以简单的理解一个根命名空间对应了一个类库包。

系统内置的几个根命名空间(类库包)如下:

如果需要增加新的根命名空间,有两种方式:注册新的根命名空间或者放入EXTEND_PATH目录(自动注册)。

请注意本手册中的示例代码为了简洁,如无指定类库的命名空间的话,都表示指的是think命名空间,例如下面的代码:

Route::get('hello','index/hello');

请自行添加 use think\Route或者使用

\think\Route::get('hello','index/hello');

8、common公共文件

其中common模块是一个特殊的模块,默认是禁止直接访问的,一般用于放置一些公共的类库用于其他模块的继承,例如:

// 应用公共文件
//增加一个新函数
function my_fun(){
return '应用公共文件';
}

调用直接{:my_fun()}可以了

最新文章

  1. C# 6.0 功能预览 (一)
  2. Polly
  3. 禁用sqlserver的锁升级
  4. python连接数据库
  5. WindowsApi 解压缩文件
  6. linux出现bash: ./java: cannot execute binary file 问题的解决办法
  7. leetcode@ [2/43] Add Two Numbers / Multiply Strings(大整数运算)
  8. Apple Watch: WatchKit 应用程序要点
  9. 【转】MSSQL获取指定表的列名信息,描述,数据类型,长度
  10. 用Lighttpd做图片服务器
  11. 树形dp总结
  12. 结识hybrid体验这一年
  13. Eclipse Decompiler不生效解决办法
  14. 吴裕雄 python神经网络 水果图片识别(3)
  15. MySQL 锁模式
  16. Mac-OSX下Ruby更新
  17. BZOJ 1010: [HNOI2008]玩具装箱toy(斜率优化dp)
  18. sql存储过程输出
  19. 20155305乔磊2016-2017-2《Java程序设计》第七周学习总结
  20. ZZNU 2076(退役学长最后的神功 zz题)

热门文章

  1. ctf pwn ida 分析技巧
  2. 爬虫之scrapy简介
  3. [考试反思]1028csp-s模拟测试91:预估
  4. Asp.net Core 系列之--1.事件驱动初探:简单事件总线实现(SimpleEventBus)
  5. 分类算法之逻辑回归(Logistic Regression
  6. vscode react自动补全html标签
  7. java编程思想第四版第十一章习题
  8. hdu 2063 过山车 (二分图,最大匹配)
  9. pandas的使用(5)
  10. 你真的会用JavaScript中的sort方法吗