thinkphp5(基础一)
├─application 应用目录(可设置)│ ├─common 公共模块目录(可更改)│ ├─index 模块目录(可更改)│ │ ├─config.php 模块配置文件│ │ ├─common.php 模块函数文件│ │ ├─controller 控制器目录│ │ ├─model 模型目录│ │ ├─view 视图目录│ │ └─ ... 更多类库目录│ ├─command.php 命令行工具配置文件│ ├─common.php 应用公共(函数)文件│ ├─config.php 应用(公共)配置文件│ ├─database.php 数据库配置文件│ ├─tags.php 应用行为扩展定义文件│ └─route.php 路由配置文件
public WEB 部署目录(对外访问目录)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)
{
//
}
}
浙公网安备 33010602011771号