thinkphp5(基础一)

    1. ├─application 应用目录(可设置)
    2. ├─common 公共模块目录(可更改)
    3. ├─index 模块目录(可更改)
    4. ├─config.php 模块配置文件
    5. ├─common.php 模块函数文件
    6. ├─controller 控制器目录
    7. ├─model 模型目录
    8. ├─view 视图目录
    9. └─ ... 更多类库目录
    10. ├─command.php 命令行工具配置文件
    11. ├─common.php 应用公共(函数)文件
    12. ├─config.php 应用(公共)配置文件
    13. ├─database.php 数据库配置文件
    14. ├─tags.php 应用行为扩展定义文件
    15. └─route.php 路由配置文件
  1. public WEB 部署目录(对外访问目录)
  2. think 命令行入口文件

入口文件定义

入口文件位置的设计是为了让应用部署更安全,public目录为web可访问目录,其他的文件都可以放到非WEB访问目录下面。 

控制器的后缀

打开配置文件application/config.php,有如下配置

'controller_suffix' => false,

表示默认情况下,控制器无特殊后缀。例如 Index控制器,文件名为Index.php
如果需要进行设置,可以设置为(我们不需要这么设置)
```php
'controller_suffix' => 'Controller',
```
表示控制器以Controller为后缀。例如Index控制器,文件名为IndexController.php

控制器的定义

 

定义位置:application/模块目录/controller/目录下
命名规则:控制器名称(首字母大写) + (控制器后缀,默认没有) + .php
默认:Index控制器  Index.php
  User控制器   User.php
  Test控制器    Test.php

编写控制器

①声明命名空间  namespace  app\模块目录名\controller

②引入控制器基类(可选) use think\Controller; think是命名空间 Controller是基类控制器

③定义当前控制器类,继承控制器基类(可选)

框架中的命名空间

命名空间本身是PHP就有的,用来防止命名冲突问题的。

TP框架中的命名空间,通常和目录挂钩。

原因:TP中的自动加载机制,会将类的命名空间作为加载路径的一部分。

TP中命名空间使用:

①声明命名空间 使用namespace关键字

②引入指定的类 使用use关键字  命名空间\类名称

③完全限定式访问  在使用类时,\完整命名空间\类名称(继承和实例化)

如果一个类没有命名空间,使用 \类名

url访问

 

ThinkPHP5.0框架中,默认使用PATH_INFO方式的url进行访问。

实例:[http://www.tpshop.com/index.php/Index/Test/index/page/10](http://www.tpshop.com/index.php/Home/Test/index/page/10)

隐藏入口文件写法:[http://域名/模块名/控制器名称/操作方法名称/参数名/参数值](http://域名/入口文件?m=分组名&c=控制器名称&a=操作方法名称&参数名=参数值)

需要对apache进行设置(手册--架构--URL访问、手册--部署--URL重写),使用PHPStudy需要将 public目录的.htaccess文件中,index.php后面加上?  号

使用Apapche的重写机制隐藏入口文件后,如果在整个url后面加上.html后缀, 让整个url看起来像是访问的静态页面。这叫做“伪静态”。

调试模式

错误描述比较模糊,不方便进行错误调试。这种模式通常叫做“部署模式”(生产模式)。

开发阶段可以将框架设置为调试模式,便于进行错误调试:
修改 项目目录\application目录\config.php                      phpdebug改为true

项目一般需要创建home(前台)和admin(后台两个模块)。

设置默认访问模块

打开配置文件application/config.php,有如下配置

'default_module' => 'index',    表示默认访问模块为index模块

可以更改默认模块home模块

'default_module' => 'home', 

命令行创建模块目录及文件

通常可以通过以下命令,自动生成模块目录

php think build --module 模块名

比如:创建test模块目录,执行命令 php think build --module test即可。

命令行创建控制器

通常可以通过以下命令,自动创建控制器       controller就是控制器的意思

php think make:controller 模块名/控制器名  
php think make:controller 模块名/控制器名 --plain

加上 --plain 参数 表示创建没有方法的空控制器类。否则控制器类中会自带一些方法。

比如:创建home模块Index控制器,执行命令 php think make:controller home/Index即可。

注意:控制器名首字母大写。

命令行创建模型

通常可以通过以下命令,自动创建模型

php think make:model 模块名/模型名

比如:创建home模块User模型,执行命令 php think make:model home/User即可。

注意:模型名首字母大写。

Request请求类

要获取当前的请求信息,可以使用\think\Request类

$request = \think\Request::instance();

或者使用助手函数
$request = request();

也可以单独获取get变量或者post变量

Request::instance()->get();
Request::instance()->post();

param方法 能够获取所有参数(id, page)

get方法 只能获取?后面的请求字符串的参数(page)

route方法 只能获取到?前面的路由中的参数(id)

依赖注入:简单的说,要在一个类A中使用另一个依赖类B时,不直接在类A中实例化类B,而是先实例化类B后再以参数的形式传入类A.

获取请求对象

 

$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)//参数绑定

 小结:1.获取请求对象   注入函数可以用input

       $request=requeest();

       $request=\think\Request::instance();

       $request=$this->request; //仅限于继承了控制器 

       pulic function save(Request $request){//依赖注入的方法

        }

       2.获取请求参数 param方法

       $params=$request->param();//接受所有数据

       $params=input();   //接受所有数据

       $params=request()->param();  //这个函数方法就是个请求对象

       $id=$request->param('id'); //接受id数据 

       $id=input('id');  //使用input方法接受id

                  3.参数绑定  

                public function edit($id)   //参数绑定

 

 

获取请求对象三个方法     get param  route 的区别

input()和$request->param()的使用   参数绑定

方法的依赖注入写法

<?php

namespace app\home\controller;

use think\Controller;
use think\Request; //自带请求对象

//控制器继承了Controller 可以用$this(调用属性)写法
class Test extends Controller
{
//protected表示受保护的,只有本类或子类或父类中可以访问;
protected $request=null;
/**
* 显示资源列表
*
* @return \think\Response
*/
public function index()
{/*
*
//获取请求对象
//$Request=new Request();
$Request=Request::instance(); //对象方法
$request=request(); //函数
$request=$this->request; //父类控制器的属性
//接受参数 获取输入变量
$params=$request->param();
//echo '<pre>';
// var_dump($params);
dump($params);
//单独接受某一个
$id=$request->param('id');
dump($id);*/

//input函数
/*$data=input();
dump($data);//接受所有
$name=input('name');//接受某一个参数
dump($name);*/

//get param route 区别
//先得到一个请求对象
$request=request();
$get=$request->get();
$param=$request->param();
$route=$request->route();
dump($get);//获取问号后面的
dump($param);//获取所有的
dump($route);//获取前面的

$id=$this->request->param('id');
dump($id);
}

/**
* 显示创建资源表单页.
*
* @return \think\Response
*/
public function create()
{
//
}

/**
* 保存新建的资源
*
* @param \think\Request $request
* @return \think\Response
*/
public function save(Request $request)
{//依赖注入写法
//通过请求对象的param方法获取name
//不用再实例化,Request $request参数相当于帮你实例化
//$request=request();
$name=$request->param('name');
dump($name);
}

/**
* 显示指定的资源
*
* @param int $id
* @return \think\Response
*/


//参数绑定(按名称绑定)
//方法参数绑定是把URL地址中的变量作为方法的参数直接传入
public function read($id)
{//如果函数写了参数,必须传参,否则报错


//可以直接接受参数 对应请求对象名称
dump($id);
//如果没有$id,就要手动接受id
$id=input('id'); //
$id=request()->param('id');//$id用param方法接受id
}

/**
* 显示编辑资源表单页.
*
* @param int $id
* @return \think\Response
*/
public function edit($id)
{
//
}

/**
* 保存更新的资源
*
* @param \think\Request $request
* @param int $id
* @return \think\Response
*/
public function update(Request $request, $id)
{
//
}

/**
* 删除指定资源
*
* @param int $id
* @return \think\Response
*/
public function delete($id)
{
//
}
}

posted @ 2020-06-09 22:24  卡卡C哦  阅读(267)  评论(0)    收藏  举报