技术学习

ThinkPHP 1

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.模板整合(模板的布局)

GouGe
程志辉 前行的路充满未知,不努力尝试,永远都不知道有多精彩。

发表评论