没有比思考更复杂的享受了,因此我们乐此不疲
URL解析
TP的框架很多操作都是通过URL来实现的:
http://hostname/index.php/模块/控制器/操作/值….;
模块在application目录下默认有一个index目录,就是一个模块
这是一个controller
模块
而Index.php
控制器的类名也必须是class Index
, 否则错误
操作就是控制器class Index
里面的方法,比如:index
或者hello
在最基础的控制器中只有一个方法
<?php
namespace app\index\controller;
class Index
{
public function index()
{
return '<style type="text/css">*{ padding: 0; margin: 0; } .think_default_text{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p> ThinkPHP V5<br/><span style="font-size:30px">十年磨一剑 - 为API开发设计的高性能框架</span></p><span style="font-size:22px;">[ V5.0 版本由 <a href="http://www.qiniu.com" target="qiniu">七牛云</a> 独家赞助发布 ]</span></div><script type="text/javascript" src="https://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script><script type="text/javascript" src="https://e.topthink.com/Public/static/client.js"></script><think id="ad_bd568ce7058a1091"></think>';
}
}
就是首页。
在该文件中添加一个hello方法
<?php
namespace app\index\controller;
class Index
{
public function index()
{
return '<style type="text/css">*{ padding: 0; margin: 0; } .think_default_text{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p> ThinkPHP V5<br/><span style="font-size:30px">十年磨一剑 - 为API开发设计的高性能框架</span></p><span style="font-size:22px;">[ V5.0 版本由 <a href="http://www.qiniu.com" target="qiniu">七牛云</a> 独家赞助发布 ]</span></div><script type="text/javascript" src="https://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script><script type="text/javascript" src="https://e.topthink.com/Public/static/client.js"></script><think id="ad_bd568ce7058a1091"></think>';
}
public function hello($name = 'ThinkPHP5')
{
return 'hello, ' .$name;
}
}
进行访问/idnex.php/index/index/hello
传参:/index.php/index/index/hello/name/m0re
创建test目录,来进行进一步解析。application/test/controller/Abc.php
<?php
//注意编码UTF-8
namespace app\test\controller;
class Abc
{
public function eat($who = '隔壁老王')
{
return $who. '吃饭!';
}
}
url解析——>http://127.0.0.1/index.php/test/Abc/eat
返回==隔壁老王吃饭==
解析——>http://127.0.0.1/index.php/test/Abc/eat/who/m0re
返回==m0re吃饭==
前提:环境开启url伪静态,如果没有开启,则ThinkPHP不支持url重写
如果没有开启url伪静态,则需使用PATH_INFO模式如下
index.php?s=test/Abc/eat/who/m0re
打开apache2的配置文件, 加载mod_rewrite.so
去掉前面的#
即可开启。
模块设计
默认模块
在config.php
中有一些默认模块,事提前设置好的
// 默认模块名
'default_module' => 'index',
// 禁止访问模块
'deny_module_list' => ['common'],
// 默认控制器名
'default_controller' => 'Index',
// 默认操作名
'default_action' => 'index',
// 默认验证器
'default_validate' => '',
// 默认的空控制器名
'empty_controller' => 'Error',
// 操作方法后缀
'action_suffix' => '',
// 自动搜索控制器
'controller_auto_search' => false,
所以在访问index.php
时,无需输入index.php即可访问到主页,是因为这个默认模块的存在。
单一模块
首先在config.php
中先将多模块关闭,也就是设置'app_multi_module' => false,
然后就可以值设置一个目录controller/
在其下方编写首页代码
<?php
namespace app\controller;//注意这里也是需要修改,原namespace app\index\controller;
class Index
{
public function index()
{
return '单一模块!';
}
}
环境变量
Env
库中获取环境变量。Env::get('app_path')
控制器定义
控制器,即controller,控制器文件存放在controller目录下
类名和文件名大小写保持一致,并采用驼峰式(首字母大写)
use think\Controller;
class Index extends Controller;
继承控制器基类。可以更方便使用功能,但不是必须的
路由
路由的作用就是让url地址更加的规范和优雅,或者说更加简洁
==路由默认开启,没有配置开关,不需要手动配置==
\think\Route::get('details/:id', 'Address/details');
替换作用,使用前者details/:id
替换掉后面的Address/details
get方法使用最多,一般是Route::get()
,默认是GET。其他方式如下:
Route::rule('details/:id', 'Address/xxxx', 'GET');
Route::rule('details/:id', 'Address/xxxx', 'POST');
Route::rule('details/:id', 'Address/xxxx', 'GET|POST');
快捷方式
GET(get), POST(post), DELETE(delete), PUT(put), PATCH(patch), *(any, 任意请求方式)
直接使用Route::get()、Route::post()
方式时无需第三参数
就到这里,看的我困。
继续肝😪😪😪😪
路由的变量规则
将details方法里面的id传值,严格的进行限制,必须是数字,因为路由没有设置的话,它可以支持数字,字母,下划线等,不支持特殊符号和中文。
Route::get('details/:id', 'Address/details')
->pattern('id', '\d+');
设置search方法的两个值规则,通过数组的方式传递参数
Route::get('search/:id/:uid', 'address/search')
->pattern([
'id' => '\d+',
'uid' => '\d+'
]);
上面两种均为局部变量规则,也可以直接在Route.php
设置全局变量规则
Route::pattern([
'id' => '\d+',
'uid' => '\d+'
]);
而后上面两种方式中也不需要->pattern('xx', 'xxx')
等操作了。
支持组合变量规则方式实现路由规则
Route::get('details-<id>', 'Address/details')
->pattern('id', '\d+');
:id
=><id>
,可以实现更改url访问路径
http://localhost/public/address/details-10.html 有时候也使用_<id>
在不设定任何规则的情况下,系统默认\w+
在配置文件中可以更改默认规则
'default_route_pattern' => '[\w\-]+',
闭包支持
闭包支持我们可以通过url直接执行。而不需要通过控制器和方法,并且可以传递参数和动态规则。
Route::get('think', function (){
return 'hello,world!';
});
Route::get('hello/:name', function ($name){
return 'hello, '.$name;
});
- 本文链接:https://m0re.top/posts/9e44b07a/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。
您可以点击下方按钮切换对应评论系统,
Valineutterances