day1上午
什么是MVC?
Model View Controller
模型 视图 控制器
Model 模型 处理业务数据 与数据库做交互
View 显示html页面 用户能够看到并与之交互的页面
Controller 接收请求 调用模型处理数据 调用视图显示页面
url访问
示例:http://www.tpshop.com/index.php/index/test/index
格式:http://域名/入口文件/模块名/控制器名称/操作方法名称 .../参数名/参数值
模块 控制器 方法
默认访问模块、开发者模式
// 应用调试模式
'app_debug' => true,
// 默认模块名
'default_module' => 'home',
命令行创建模块
1.命令行创建模块目录
php think bulid --module 模块名
例如:
php think build --module home
Successed
2.命令行创建控制器
php think make:controller 模块名/控制器名
php think make:controller 模块名/控制器名 --plain
例如:
php think make:controller home/Test
Controller created successfully.
3.命令行创建模型
php think make:model 模块名/模型名
php think make:model home/User
Model created successfully.
day1下午
Request请求
ThinkPhp5.0 版本默认的变量修饰符是/s(字符串),还可以用其他的
s字符串 d整型 b布尔型 a数组 f浮点型
如果你要获取的数据为数组,请一定注意要加上/a 修饰符 强制转换为array数组 才能正确获取到
// 默认全局过滤方法 用逗号分隔多个 //trim去掉两端空格
'default_filter' => 'trim',
变量类型方法('变量名/变量修饰符','默认值','过滤方法')
http://www.tpshop.com/home/index/index/id/heloworld
$request = Request::instance();
$id = $request->param('id/a');
dump($id);
创建Request对象 四种种方法
public function index(Request $request)
{
// $request = Request::instance(); //对象方法
// $request = request(); //函数
$request = $this->request; //父类属性
}
$request = $this->request; 由于当前控制器继承了父类控制器Controller
使用$this->request 必须要当前控制器继承extends Controller
Controller里面有一个$request这个属性 这个属性的值就是一个请求对象
protected $request;
$this->request = is_null($request) ? Request::instance() : $request;
获取请求对象 两种方法
dump($request->param());
echo $request->param('id');
dump(input());
echo input('name');
get param route区别
http://www.tpshop.com/index.php/home/test/index/id/100/name/tp?age=30&sex=nan
$request = request();
$get = $request->get();
$param = $request->param();
$route = $request->route();
dump($get);
dump($param);
dump($route);
array(2) {
["age"] => string(2) "30"
["sex"] => string(3) "nan"
}
array(4) {
["age"] => string(2) "30"
["sex"] => string(3) "nan"
["id"] => string(3) "100"
["name"] => string(2) "tp"
}
array(2) {
["id"] => string(3) "100"
["name"] => string(2) "tp"
}
get只有?后面的 route只有/部分的 param都有
参数绑定
http://www.tpshop.com/index.php/home/test/read?id=100
public function read($id=0,$name="")
{
dump($id);
dump($name);
}
一般推荐只写id 不然写多了 不好看
参数绑定是把URL地址(或者路由地址)中的变量作为操作方法的参数直接传入
依赖注入
简单点说,要在一个类A中使用另一个依赖类B时,不能直接在A中实例化类B,而是先实例化类B再以参数的形式传入类A
<?php
class A{
public function get_name(){
return 'A-getname';
}
}
class B{
public function get_name(A $a){
// return 'B-getname';
// $a = new A();
$name =$a->get_name();
return $name;
}
}
$b = new B();
$obj = new A();
echo $b->get_name($obj);
TP
public function index(Request request){ }
小结
可以找到任何一种方法 接收请求参数
//1.获取请求对象
$request = request();
$request = \think\Request::instance();
$request = $this->request //仅限于继承了底层控制器的情况下
//依赖注入
public function save(Request $request){}
//2.接收请求参数 param方法
$params = $request->param();
$params = input();
$params = request()->param();
$id = $request->param('id');
$id = input('id');
//参数绑定
public function edit($id){}
视图
全局布局设计,对所有页面全部生效
<?php
//配置文件
return [
'template' => [
'layout_on' =>true, //开启全局模块布局
'layout_name' =>'layout' //布局文件名称 默认就是layout可以省略不写
],
];
特殊页面(不需要使用布局的页面),可以在控制器方法中,临时关闭模板布局。
$this->view->engine->layout(false)
技巧 默认就是layout可以省略不写
注意点一定不能将所有的css和JS写在layout.html中否则可能导致报错
./static/admin/css/main.css
/static
可以替换为
__STATIC__ //系统变量
./ 与 / 区别
./是相对路径 会相对当前的URL进行相对定位请求资源
/是绝对定位 根据入口文件作为根目录来请求资源
框架中html推荐加载文件 统一以/开头
总结
1.安装部署框架,熟悉目录结构(application,public)
2.控制器定义,控制器访问(隐藏入口文件、Path_info格式URL)能够访问到指定的控制器方法
3.命令行操作(创建模块目录,控制器类,模型)(环境变量等)
4.Request请求对象基本使用,接收参数不同写法(熟练使用一种)
5.模板整合(模板的布局)