点击File->settings->Keymap可以设置快捷键
例如格式化代码快捷键,我本人时用惯了Ctrl+K的;在不冲突的情况下;可以把默认的改成Ctrl+K
Reformat Code
默认格式化快捷键是Ctrl+Alt+L
自定义格式化代码快捷键Ctrl+K
正常我们创建类时需要自己填写namespace(app\test1\controller),但是我觉得很麻烦;
于是我设置了一下
File->setings->Project->找到对应的项目->选中application文件夹->点击Sources->看到右侧Source Folders->然后右下角有个小P->点击然后有弹框->输入app就好了
具体操作:
现在我创建类就不用自己写namespace了,啊哈哈哈
看到这么长的路由我萌生退意了;要是搞一下controller然后传几个参数;我连自己写了什么看不清了;
这显然很不行啊!!!!
于是我搞了一下我的小皮面板;点击网站->创建网站;简单的配置了一下;
细节:1、PHP版本要和你的代码开发版本的一样
细节:2、根目录要选中到TP5框架下的public文件夹;不然就会访问不到
嗯嗯,精简了很多!!!
当然,这只是第一步;如果有需要我们可以到application下的route.php文件配置自己的route规则;但是目前我还没学习到;等后期继续简化路由
在application文件夹下找到config.php文件
找到 ‘show_error_msg’ 的 false 改成 => true
如果还觉得信息不够详细的话还可以 ‘app_debug’ 把 false 改成 => true
目前感觉开发状态中;只设置 app_debug 为true就够用了
截图如下:
这里我说一下比较常用的方法和内容
先说一下路由的访问规则;默认是 模块/控制器/操作名称
注意点:我要访问Test5.php下的hello($id)方法
是用:http://www.shopping.cn:8899/api/Test5/hello?id=123
如果是访问 v1/Test1.php 下的hello($id)方法就有点小区别;
要这样访问:http://www.shopping.cn:8899/api/v1.Test1/hello?id=123
介绍完路由的访问规则;接下来进入正题:
也就是直接用参数;在 hello() 上直接传一个 id 值 ;然后直接使用 $id 就可以获取了
先引用Request use think\Request;
可以通过Request对象完成全局输入变量的检测、获取和安全过滤,支持包括 $_GET、 $_POST、 $_REQUEST、 $_SERVER、 $_SESSION、 $_COOKIE、 $_ENV等系统变量,以及文件上传信息。
开发文档上的内容:
变量类型方法包括:
方法 | 描述 |
---|---|
param | 获取当前请求的变量 |
get | 获取 $_GET 变量 |
post | 获取 $_POST 变量 |
put | 获取 PUT 变量 |
delete | 获取 DELETE 变量 |
session | 获取 $_SESSION 变量 |
cookie | 获取 $_COOKIE 变量 |
request | 获取 $_REQUEST 变量 |
server | 获取 $_SERVER 变量 |
env | 获取 $_ENV 变量 |
route | 获取 路由(包括PATHINFO) 变量 |
file | 获取 $_FILES 变量 |
大家对 get 和 post 很熟悉;但是对 put 和 delete 可能会感到陌生;这是源于REST设计风格;大家感兴趣可以去百度搜索一下
URL定位资源,用HTTP动词(GET,POST,DELETE,PUT)描述操作。
GET 获取一个资源
POST 添加一个资源
PUT 修改一个资源
DELETE 删除一个资源
$request = Request::instance();
$all=Request::instance()->param();//获取全部参数;
$id=Request::instance()->param('id');//获取变量,不区分类型直接获取
$getall=Request::instance()->get();//获取get 的参数
$id=Request::instance()->get('id');
$postall=Request::instance()->post();//post 获取post参数
$name=Request::instance()->post('name');
param方法会把当前请求类型的参数和PATH_INFO变量以及GET请求合并。
input函数默认就采用PARAM变量读取方式
$request =request();
$all=input('');或者input('param.');//获取全部参数;
$id=input('param.id');//获取变量,不区分类型直接获取
$getall=input('get.');//获取get 参数
$id=input('get.id');
$postall=Request::instance()->post();//post 获取post参数
$name=input('post.name');
我这里只是写了比较常用的;具体的话可以看开发文档;开发手册上写的很全面
开发手册:https://www.kancloud.cn/manual/thinkphp5/158834
把 ‘url_route_on’ 的 false 改成true
根据开发手册上的内容路由有三种模式,分别是:普通模式、混合模式还有强制模式
目前我个人使用的是混合模式;
找到application文件夹下的route.php
使用自定义路由时要先use一下use think\Route;
接下来就是注册路由了
注册路由规则如下:
use think\Route;
// 注册路由 api模块的Test5控制器的hello操作
Route::rule('hello/:id','api/Test5/hello');
默认方法:
是不是感觉路由很长,很复杂;再试试自定义的
是不是感觉舒服了很多。
看了开发文档的路由介绍;感觉…嗯嗯…
我看了好久的文档,简单的提炼了一下注册路由的规则
重点:
Route::rule(‘路由表达式’,‘路由地址’,‘请求类型’,‘路由参数(数组)’,‘变量规则(数组)’);
定义方式 | 定义格式 |
---|---|
方式1:路由到模块/控制器 | ‘[模块/控制器/操作]?额外参数1=值1&额外参数2=值2…’ |
方式2:路由到重定向地址 | ‘外部地址’(默认301重定向) 或者 [‘外部地址’,‘重定向代码’] |
方式3:路由到控制器的方法 | ‘@[模块/控制器/]操作’ |
方式4:路由到类的方法 | ‘\完整的命名空间类::静态方法’ 或者 ‘\完整的命名空间类@动态方法’ |
方式5:路由到闭包函数 | 闭包函数定义(支持参数传入) |
这么多方法看到头晕了…
方式一:路由到模块/控制器
'[模块/控制器/操作]?额外参数1=值1&额外参数2=值2…'
// 路由到默认或者绑定模块
'blog/:id'=>'blog/read',
// 路由到index模块
'blog/:id'=>'index/blog/read',
这里涉及到绑定模块的问题,简单的提一下;不然看开发文档也有点懵(都是写在route.php文件里)
// 绑定当前的URL到 index模块
Route::bind('index');
// 绑定当前的URL到 index模块的blog控制器
Route::bind('index/blog');
// 绑定当前的URL到 index模块的blog控制器的read操作
Route::bind('index/blog/read');
如果写了绑定模块的话,
//没写
Route::rule('hello/:id','api/Test5/hello');
//写了
Route::bind('api');
Route::rule('hello/:id','Test5/hello');//可以不用写api
方式二:路由到重定向地址
重定向的外部地址必须以“/”或者http开头的地址。
'blog/:id'=>'/blog/read/id/:id'
和
'blog/:id'=>'blog/read'
虽然都是路由到同一个地址,但是前者采用的是301重定向的方式路由跳转,这种方式的好处是URL可以比较随意(包括可以在URL里面传入更多的非标准格式的参数),而后者只是支持模块和操作地址。
方式三:路由到控制器的方法----->‘@[模块/控制器/]操作’
这种方式看起来似乎和第一种是一样的,本质的区别是直接执行某个控制器类的方法,而不需要去解析 模块/控制器/操作这些,同时也不会去初始化模块。
定义如下路由后:'blog/:id'=>'@index/blog/read',
系统会直接执行 Loader::action('index/blog/read');
相当于直接调用 \app\index\controller\blog类的read方法。
Blog类定义如下:
namespace app\index\controller;
class Blog {
public function read($id){
return 'read:'.$id;
}
}
看一下例子
Route::rule('hello/:id','api/Test5/hello','GET'); //GET请求
Route::rule('hello/:id','api/Test5/hello','GET|POST');//GET或者POST请求(他们之间是用 | 隔开)
//也可以用下面这种
Route::get('hello/:id','api/Test5/hello'); // 定义GET请求路由规则
Route::any('hello/:id','api/Test5/hello'); // 所有请求都支持的路由规则
Route::rule([
‘路由规则1’=>‘路由地址和参数’,
‘路由规则2’=>[‘路由地址和参数’,‘匹配参数(数组)’,‘变量规则(数组)’]
…
],’’,‘请求类型’,‘匹配参数(数组)’,‘变量规则’);
个人感觉就是创建数组思维一样;一个键一个值
如果在外面和规则里面同时传入了匹配参数和变量规则的话,路由规则定义里面的最终生效,但请求类型参数以最外层决定
就是 匹配参数和变量规则如果出现冲突以最内层为准;但是请求类型get,post以外层为准
批量路由注册和单个注册其实是差不多的,换汤不换药
//手册的案例
Route::rule([
'new/:id' => 'News/read',
'blog/:id' => ['Blog/update',['ext'=>'shtml'],['id'=>'\d{4}']],
...
],'','GET',['ext'=>'html'],['id'=>'\d+']);
//以上的路由注册,最终blog/:id只会在匹配shtml后缀的访问请求,id变量的规则则是 \d{4}。
// 批量注册GET路由
Route::get([
'new/:id' => 'News/read',
'blog/:id' => ['Blog/edit',[],['id'=>'\d+']]
...
]);
'method'=>'POST|GET|PUT',//请求类型检测
'ext'=>'shtml|html|php',//检测是shtml|html|php这三个后缀的请求就通过
'deny_ext'=>'jpg|png|gif',//URL禁止后缀检测,这里禁止检测jpg|png|gif者三个后缀
'domain'=>'news.thinkphp.cn',//子域名检测则直接news就行'domain'=>'news']
'https'=>true,//检测是否https请求
'before_behavior'=>'\app\index\behavior\UserCheck',//前置行为(检测)
'after_behavior'=>'\app\index\behavior\ReadInfo',//后置行为(执行)
'callback'=>'my_check_fun',//自定义检测方法
'merge_extra_vars'=>true,//合并额外参数
'cache'=>3600,//请求缓存V5.0.1+
'bind_model'=>['User','name'],//绑定模型V5.0.1+
'param_depr'=>'',//路由参数分隔符V5.0.2+
'ajax'=>true,//V5.0.2+
'pjax'=>true,//V5.0.2+
// 设置name变量规则(采用正则定义)
Route::pattern('name','\w+');
// 支持批量添加
Route::pattern([
'name' => '\w+',
'id' => '\d+',
]);
// 定义GET请求路由规则 并设置name变量规则
Route::get('new/:name','News/read',[],['name'=>'\w+']);
// 定义GET请求路由规则 并设置完整URL变量规则
Route::get('new/:id','News/read',[],['__url__'=>'new\/\w+$']);
如果一个变量同时定义了全局规则和局部规则,局部规则会覆盖全局变量的定义。
感觉就是---->就近原则
变量规则主要就是用正则表达式对路由进行处理;和之前的路由注册差不多;就是多了一个参数。
开发文档的变量规则解释
重点重点重点;重要的事情要说三次
Route::rule(‘路由表达式’,‘路由地址’,‘请求类型’,‘路由参数(数组)’,‘变量规则(数组)’);
解决方法:
把:
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
改为:
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
在index.php后面加多一个?
无
刚开始学习;如果有什么不足之处;或者不对的地方可以指出哦!