项目方案
设置public为根目录
phpstudy 自行百度设置
隐藏入口文件
phpstudy环境下,下载tp5.0自带的重新文件无效,需要使用下面的设置
<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地址变化
隐藏之前index.php/控制器/方法
隐藏之后/控制器/方法
模块绑定
在入口文件中设置
前台绑定为wxapi
// 绑定前台
define('BIND_MODULE', 'index');
后台绑定为admin
// 绑定后台
define('BIND_MODULE', 'admin');
路由设置
作用
- 简化URL地址,方便大家记忆
- 有利于搜索引擎的优化
基本概念
路由三模式
模式 | url_route_on | url_route_must | 描述 | 形式 |
---|---|---|---|---|
普通模式 | false | false | 关闭路由,完全使用默认的PATH_INFO方式URL | index.php/模块/控制器/方法 |
混合模式 | true | false | 开启路由,并使用路由定义+默认PATH_INFO方式的混合 | |
强制模式 | true | true | 开启路由,并设置必须定义路由才能访问 |
-
路由只针对应用,不针对模块,因此路由的设置也是针对应用下面的所有模块。
-
如果某些模块不想使用路由的话,关闭路由
在后台入口文件中增加关闭路由配置(必须写在 加载引导文件之后) hinkApp::route(false);
项目配置
-
前台使用简写模式
-
后台使用常规模式
admin.php 最后 // 关闭admin模块的路由 hinkApp::route(false);
设置路由
-
设置路由格式
Route::rule(‘路由表达式’, ‘路由地址’, ‘请求类型’, ‘路由参数(数组)’, ‘变量规则(数组)’)
-
设置路由文件(根目录application oute.php)
-
设置路由之后就不能使用PATH_INFO形式访问
-
基本设置
<?php use thinkRoute; Route::rule('/','index/index/index');
路由的形式
静态地址路由
Route::rule('/test','index/index/test');
1、路由带参数:
-
一个参数
Route::rule(‘blog/:uid’,‘index/index/blog’);
-
多个参数
Route::rule(‘blog/:year/:month’,‘index/index/blog’);
//(两个参数,只要有一个没有写就会报错)
后台接收参数
index.php中
function blog(){
// 一个参数
return input('uid');
// 多个参数
return input('year').input('month');
}
2、可选参数路由:
Route::rule('time/:year/[:month]','index/index/time');
3、全动态路由:
Route::rule(':a/:b','index/index/time');
4、完全匹配路由:
Route::rule('test$','index/index/test');
//http://www.tp5.net/test 可以成功访问
//http://www.tp5.net/num/4 不能成功访问
5、额外带参数:(比如微信用户验证时需要
Route::rule('test','index/index/test?status=1&app_id=5');
6、miss路由
Route:rule([
'news/:id'=>'index/News/lists',
'blog/:id'=>'index/Blog/lists',
'__miss__' => 'public/miss' // 路径为index/Public/miss
])
7、url生成
当配置路由为:Route.rule([‘blog’,‘blod/:id’],‘index/blog/lists’)
url地址有两种写法:
- Url:build(‘index/blog/lists’, [‘id’=>666])
- build(‘index/blog/lists’, [‘id’=>666])
当配置的路由有别名时可以简写为 build('blog', ['id'=>666])
8、快捷路由
Route.php
Route::controller('user','index/User');
User.php
namespace appindexcontroller;
class User {
public function getInfo()
{
}
public function getPhone()
{
}
public function deleteInfo()
{
}
}
访问地址
get /user/info
get /user/phone
delete /user/info
9、别名操作&操作方法黑白名单
Route::alias('comment','index/comment',[
'ext'=>'html',
'allow'=>'index,read,save,edit', // 允许
'except'=>'delete', // 禁止
'method'=>['index'=>'GET','read' => 'GET', 'save'=>'POST', 'edit' => 'PUT']
]);
配置文件写法
return [
'__alias__' => [
'comment' => ['index/comment',['ext'=>'html']],
],
];
10、资源路由
Route::resource(‘blog’,‘index/blog’);
设置后会自动注册7个路由规则,如下:
Route::get(['index', 'blog'], 'index/blog'); // 默认 index 博客列表
Route::get(['create', 'blog/create'], 'index/blog/create'); // 默认 create 添加博客
Route::post(['save', 'blog'],'index/blog/save'); // 默认 save 保存博客
Route::get(['read', 'blog/:id'], 'index/blog/read'); // 默认 read 查看博客详情
Route::get(['edit', 'blog/:id/edit'], 'index/blog/edit'); // 默认 edit 编辑博客显示页面
Route::put(['update', 'blog/:id'], 'index/blog/update'); // 默认 update 编辑博客
Route::delete(['delete', 'blog/:id'], 'index/blog/update'); // 默认 delete 删除博客
或者在路由配置文件中使用__rest__添加资源路由定义:
return [
// 定义资源路由
'__rest__' => [
'blog' => 'index/blog'
]
]
namespace appindexcontroller;
class Blog {
public function index()
{
}
public function read($id)
{
}
public function edit($id)
{
}
}
更改默认参数
Route::resource('blog','index/blog',['var'=>['blog'=>'blog_id']]);
...
public function read($blog_id)
{
}
...
黑白名单
Route::resource('blog','index/blog',[
'only'=>['index','read','edit','update'],
'except'=>['delete'] // 禁止删除
]);
如果需要更改某个资源路由标识的对应操作,可以使用下面方法:
Route::rest('create',['GET', '/add','add']);
设置之后,URL访问变为:
http://serverName/blog/create
变成
http://serverName/blog/add
创建blog页面的对应的操作方法也变成了add
批量
Route::rest([
‘save’ => [‘POST’, ‘’, ‘store’],
‘update’ => [‘PUT’, ‘/:id’, ‘save’],
‘delete’ => [‘DELETE’, ‘/:id’, ‘destory’],
]);
嵌套路由
Route::resource('blog.comment','index/comment');
访问如下地址:
http://serverName/blog/128/comment/32
http://serverName/blog/128/comment/32/edit
生成的路由规则分别是:
blog/:blog_id/comment/:id
blog/:blog_id/comment/:id/edit
Comment控制器对应的操作方法如下:
namespace appindexcontroller;
class Comment{
public function edit($id,$blog_id){
}
}
edit方法中的参数顺序可以随意,但参数名称必须满足定义要求。
11、路由方式
1)[模块/控制器/]操作?参数1=值1&参数2=值2…
2)@[模块/控制器/]操作
与1)本质的区别是直接执行某个控制器类的方法,而不需要去解析 模块/控制器/操作这些,同时也不会去初始化模块
设置路由
'blog/:id'=>'@index/blog/read',
系统会直接执行
Loader::action('index/blog/read');
由于没有定义当前模块名、当前控制器名和当前方法名 ,从而导致视图的默认模板规则失效
所以这种情况下面,如果使用了视图模板渲染,则必须传入明确的参数。
3)类的命名空间类名@方法名 || 类的命名空间类名::方法名
可以支持执行任何类的方法,而不仅仅是执行控制器的操作方法
'blog/:id'=>'appindexserviceBlog@read',
执行的是 appindexserviceBlog类的read方法。
4)路由到重定向地址(迁移网站时有用
路由地址以“/”或者“http”开头则会认为是一个重定向地址或者外部地址
'blog/:id'=>'/blog/read/id/:id'
12、路由分组
路由分组功能允许把相同前缀的路由定义合并分组,这样可以提高路由匹配的效率,不必每次都去遍历完整的路由规则。
'blog/:id' => ['Blog/read', ['method' => 'get'], ['id' => 'd+']],
'blog/:name' => ['Blog/read', ['method' => 'post']],
分组:
'[blog]' => [
':id' => ['Blog/read', ['method' => 'get'], ['id' => 'd+']],
':name' => ['Blog/read', ['method' => 'post']],
],
使用Route类的group方法进行注册,如下:
Route::group('blog',[
':id' => ['Blog/read', ['method' => 'get'], ['id' => 'd+']],
':name' => ['Blog/read', ['method' => 'post']],
]);
定义公用的路由设置参数
Route::group('blog',[
':id' => ['Blog/read', [], ['id' => 'd+']],
':name' => ['Blog/read', [],
],['method'=>'get','ext'=>'html']);
闭包方式 略
嵌套分组
Route::group(['method'=>'get','ext'=>'html'],function(){
Route::group('blog',function(){
Route::rule('blog/:id','blog/read',[],['id'=>'d+']);
Route::rule('blog/:name','blog/read',[],['name'=>'w+']);
}
});
命令行
命令行生成目录结构
配置build.php
命令行生成
配置好php环境变量
切入到根目录下
php think build
php think build --config 配置文件名
这里的build执行的是application目录下的build.php 而非根目录下的。
添加自动生成代码
入口文件,比如index.php下加上
// 读取自动生成定义文件
$build = include 'build.php';
// 运行自动生成
// 第二个参数 命名空间 默认app
// 第三个参数 是否使用类后缀 默认为false 设置为true 会生成controller和model这样的目录名后缀,比如indexController.php
hinkBuild::run($build,'app',false);
使用默认配置
hinkBuild::module('admin');
创建类库文件
快速生成控制器类
执行下面的指令可以生成index模块的Blog控制器类库文件
php think make:controller index/Blog
如果仅仅生成空的控制器则可以使用:
php think make:controller indexBlog --plain
快速生成模型类
执行下面的指令可以生成index模块的Blog模型类库文件
php think make:model index/Blog
自定义命令
待续…
mysql
调试
echo User::getLastSql();
开启调试
修改一下php.ini中的 variables_order = “GPCS”。需要多添加一个E,即
variables_order = “EGPCS”。
重启服务器
在根目录下新建.env文件
'app_debug' => true
原本的配置文件设置将无效