tp5.0入门笔记

项目方案

基本用法和api配置

设置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');

路由设置

作用

  1. 简化URL地址,方便大家记忆
  2. 有利于搜索引擎的优化

基本概念

路由三模式
模式 url_route_on url_route_must 描述 形式
普通模式 false false 关闭路由,完全使用默认的PATH_INFO方式URL index.php/模块/控制器/方法
混合模式 true false 开启路由,并使用路由定义+默认PATH_INFO方式的混合
强制模式 true true 开启路由,并设置必须定义路由才能访问
  1. 路由只针对应用,不针对模块,因此路由的设置也是针对应用下面的所有模块。

  2. 如果某些模块不想使用路由的话,关闭路由

     在后台入口文件中增加关闭路由配置(必须写在 加载引导文件之后)
     \think\App::route(false);
    

项目配置

  1. 前台使用简写模式

  2. 后台使用常规模式

     admin.php 最后
     // 关闭admin模块的路由
     \think\App::route(false);
    

设置路由

  1. 设置路由格式

     Route::rule(‘路由表达式’, ‘路由地址’, ‘请求类型’, ‘路由参数(数组)’, ‘变量规则(数组)’)
    
  2. 设置路由文件(根目录\application\route.php)

  3. 设置路由之后就不能使用PATH_INFO形式访问

  4. 基本设置

     <?php
     use think\Route;
     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地址有两种写法:

  1. Url:build(‘index/blog/lists’, [‘id’=>666])
  2. build(‘index/blog/lists’, [‘id’=>666])

当配置的路由有别名时可以简写为 build('blog', ['id'=>666])

8、快捷路由

Route.php
Route::controller('user','index/User');

User.php
namespace app\index\controller;
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 app\index\controller;
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 app\index\controller;
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'=>'\app\index\service\Blog@read',

执行的是 \app\index\service\Blog类的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
\think\Build::run($build,'app',false);
使用默认配置
\think\Build::module('admin');

创建类库文件

快速生成控制器类

执行下面的指令可以生成index模块的Blog控制器类库文件

php think make:controller index/Blog

如果仅仅生成空的控制器则可以使用:

php think make:controller index\Blog --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

原本的配置文件设置将无效


猜你喜欢

转载自blog.csdn.net/junjiahuang/article/details/83243243