MVC结构:指的是有三层结构,model(模型层),用来提供一些基础的数据库调用方法以及一些访问数据库的捷径,view层用来提供一个视觉界面交互,controller用来提供网页入口以及面向对象操作的方法
5.0版本对模块设计进行了优化,默认采用了多模块的架构,并且支持单一模块设计,所有模块的命名空间均以APP作为根命名空间(可配置更改)
<?php
namespace app\index\controller;//定义命名空间在当前所在的目录
class Index //定义当前的类名,类名需要和当前的文件名保持一致
{
public function index()//定义当前类下的方法名称
{
return "this is index index index";
}
}
?>
那么在以上的命名空间,我们编写这个控制器的方法后,通过URLhttp://localhost/tp5/public/ 访问即得到如上的结果
首先编写common模块下的controller下的index方法
<?php
namespace app\common\controller;
class Index
{
public function index()
{
return "common index index";
}
}
然后在index模块下使用
use app\common\controller\Index as commonIndex;
使用之后进行对象的new,new完之后直接使用方法
public function common()
{
$common = new commonIndex();
return $common->index();
}
那么从这里可以知道:当大量的通用方法被调用的时候,可以在common下编写对应的类和方法,直接use引用,通过new出对象再使用方法的方式来进行,或者是另外一种继承当前对象的方法来调用this指针来使用方法
<?php
namespace app\index\controller;
use app\common\controller\User as commonUser;
class User extends commonUser
{
public function demo()
{
return $this->showName("Lumxi");
}
}
public function index()//定义当前类下的方法名称
{
$res = Config::get();
dump($res);
}
public function index()//定义当前类下的方法名称
{
$res = config();
dump($res);
}
获取单个参数得方法:
public function index()//定义当前类下的方法名称
{
$res = Config::get('app_namespace');
dump($res);
}
ThinkPHP5.0框架下的入口文件方式为单入口文件,应用程序所有的http请求都由某一个文件接收并且由这个文件转发到功能代码中去
在函数中边编写函数方法
public function info($id)
{
return "{$id}";
}
因此需要一个id变量,通过URL传入id变量,如果直接传递,按照URL的规则,就是index/index/info/5,这样一大串非常不利于我们的开发,于是我们需要借用路由,首先开启路由配置,开启后再confi文件夹下创建route.php,传入以下配置数组。
<?php
return [
'news/:id'=>'index/index/info'
];
?>
值得一提的是:当开启路由后,进行URL数组解析会优先解析路由.
有三种方法能够获取到对象
第一种方法是直接用request获取到实例对象
public function index()
{
$request = request();
dump($request);
}
第二种方法是直接用Think下的request的类
use think\Request;//首先启用此类
接着就可以直接通过此函数获取到实例
$request=Request::instance();
第三种方法是直接对对象进行注入
public function index(Request $request)
{
//$request=Request::instance();
//$request = request();
dump($request);
}
public function index(Request $request)
{
dump($request->domain());
}
public function index(Request $request)
{
dump($request->pathinfo());
dump($request->path());
}
public function index(Request $request)
{
dump($request->method());
dump($request->isGet());
dump($request->isPost());
dump($request->isAjax());
}
知识点补充:
session是指一个会话:通过为每个独立用户分配唯一的会话 ID,可以实现针对不同用户分别存储数据的功能。 会话通常被用来在多个页面请求之间保存及共享信息。 一般来说,会话 ID 通过 cookie 的方式发送到浏览器,并且在服务器端也是通过会话 ID 来取回会话中的数据。 如果请求中不包含会话 ID 信息,那么 PHP 就会创建一个新的会话,并为新创建的会话分配新的 ID。
会话的工作流程很简单。当开始一个会话时,PHP 会尝试从请求中查找会话 ID (通常通过会话 cookie), 如果请求中不包含会话 ID 信息,PHP 就会创建一个新的会话。 会话开始之后,PHP 就会将会话中的数据设置到 $_SESSION 变量中。 当 PHP 停止的时候,它会自动读取 $_SESSION 中的内容,并将其进行序列化, 然后发送给会话保存管理器来进行保存。
cookie:cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。
如何创建 Cookie?
setcookie() 函数用于设置 cookie。
注释:setcookie() 函数必须位于 标签之前。
语法
setcookie(name, value, expire, path, domain);
PHP 的 $_COOKIE 变量用于取回 cookie 的值。
在下面的实例中,我们取回了名为 “user” 的 cookie 的值,并把它显示在了页面上:
public function index(Request $request)
{
dump($request->get());//注意一个问题,在这个get方法里面不能得到pathinfo的参数
dump($request->param());//而这个方法就可以得到pathinfo里面的参数
dump($request->session());
dump($request->cookie());
dump($request->param('type'));//单个参数的获取方式
}
public function index(Request $request)
{
dump($request->module());
dump($request->controller());
dump($request->action());
}
input函数的作用主要是协助开发者获取请求中的参数,下面介绍其用法
由于input具有一个特性:会将post和get两种方法的参数合并,这有时候会导致我们的数据丢失,于是有以下方法进行获取特定的参数
public function index(Request $request)
{
dump($request->param());
$res = input('get.id');
dump($res);
}
input也可以为不存在的值设置一个defualt值,同时在参数表的第三个位置中也可以设置一个intval(例如)这样的默认类型转换.
注意input方法虽然方便,但是会存在一个 "if(alive)"的问题,所以我们必须好好利用defualt这个特性来保护我们的程序
http请求每个请求都会对应一个响应,在ThinkPHP中提供了方法对这个响应进行控制。
控制器方法设置
<?php
namespace app\index\controller;
use think\Controller;
use think\view;
class Index extends Controller
{
public function index()
{
$list = [
'user1'=>[
'username'=>'Lumxi',
'password'=>'123'
],
'user2'=>[
'username'=>'sqio',
'password'=>'123'
],
'user3'=>[
'username'=>'leon',
'password'=>'123'
],
];
$this->assign('list',$list);
return $this->fetch();
}
}
html文件交互
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{volist name='list' id='vo' empty='这里没有数据'}
<p>{$i}:{$vo.username}</p>
{/volist}
</body>
</html>
foreach
{foreach $list as $val}
<p>{$val.username}{$val.password}</p>
{/foreach}