学习来源与说明

https://www.kancloud.cn/thinkphp/thinkphp5_quickstart

测试与部署均在windows10下进行学习。

快速入门第三节

获取当前的请求信息的四种方案

继承think\Controller

<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function hello($name = 'World')
{
// 获取当前URL地址 不含域名
echo 'url: ' . $this->request->url() . '<br/>';
return 'Hello,' . $name . '!';
}
}

访问界面并传递参数:http://127.0.0.1/index/index/hello/name/123,网页获取name值为123,输出了请求的url。

效果:

自动注入请求对象

方法带入形参

<?php
namespace app\index\controller;
use think\Request;
class Index
{
public function hello(Request $request, $name = 'World')
{
// 获取当前URL地址 不含域名
echo 'url: ' . $request->url() . '<br/>';
return 'Hello,' . $name . '!';
}
}

使用助手函数

系统提供的方法

<?php
namespace app\index\controller;
class Index
{
public function hello($name = 'World')
{
// 获取当前URL地址 不含域名
echo 'url: ' . request()->url() . '<br/>';
return 'Hello,' . $name . '!';
}
}

动态绑定属性

方便全局调用(未直接示例)

制作Base控制器:

<?php
namespace app\index\controller;
use app\index\model\User;
use think\Controller;
use think\Request;
use think\Session;
class Base extends Controller
{
public function _initialize()
{
$user = User::get(Session::get('user_id'));
Request::instance()->bind('user',$user);
}
}

其它控制器中调用:

<?php
namespace app\index\controller;
use app\index\controller\Base;
use think\Request;
class Index extends Base
{
public function index(Request $request)
{
echo $request->user->id;
echo $request->user->name;
}
}

获取请求变量

参数信息与输出:

<?php
namespace app\index\controller;
use think\Request;
class Index
{
public function hello(Request $request)
{
echo '请求参数:';
dump($request->param());
echo 'name:'.$request->param('name');
}
}

输入访问网址:http://127.0.0.1/index/index/hello/name/123/test/ddd

输出效果:

使用input助手函数代替$request->param()

<?php
namespace app\index\controller;
class Index
{
public function hello()
{
echo '请求参数:';
dump(input());
echo 'name:'.input('name');
}
}

过滤变量

public function hello(Request $request)
{
echo 'name:'.$request->param('name','World','strtolower');
echo '<br/>test:'.$request->param('test','thinkphp','strtoupper');
}

获取其它参数

<?php
namespace app\index\controller;
use think\Request;
class Index
{
public function hello(Request $request)
{
echo 'GET参数:';
dump($request->get());
echo 'GET参数:name';
dump($request->get('name'));
echo 'POST参数:name';
dump($request->post('name'));
echo 'cookie参数:name';
dump($request->cookie('name'));
echo '上传文件信息:image';
dump($request->file('image'));
}
}
<?php
namespace app\index\controller;
use think\Request;
class Index
{
public function hello(Request $request)
{
echo '请求方法:' . $request->method() . '<br/>';
echo '资源类型:' . $request->type() . '<br/>';
echo '访问IP:' . $request->ip() . '<br/>';
echo '是否AJax请求:' . var_export($request->isAjax(), true) . '<br/>';
echo '请求参数:';
dump($request->param());
echo '请求参数:仅包含name';
dump($request->only(['name']));
echo '请求参数:排除name';
dump($request->except(['name']));
}
}
<?php
namespace app\index\controller;
use think\Request;
class Index
{
public function hello(Request $request,$name = 'World')
{
// 获取当前域名
echo 'domain: ' . $request->domain() . '<br/>';
// 获取当前入口文件
echo 'file: ' . $request->baseFile() . '<br/>';
// 获取当前URL地址 不含域名
echo 'url: ' . $request->url() . '<br/>';
// 获取包含域名的完整URL地址
echo 'url with domain: ' . $request->url(true) . '<br/>';
// 获取当前URL地址 不含QUERY_STRING
echo 'url without query: ' . $request->baseUrl() . '<br/>';
// 获取URL访问的ROOT地址
echo 'root:' . $request->root() . '<br/>';
// 获取URL访问的ROOT地址
echo 'root with domain: ' . $request->root(true) . '<br/>';
// 获取URL地址中的PATH_INFO信息
echo 'pathinfo: ' . $request->pathinfo() . '<br/>';
// 获取URL地址中的PATH_INFO信息 不含后缀
echo 'pathinfo: ' . $request->path() . '<br/>';
// 获取URL地址中的后缀信息
echo 'ext: ' . $request->ext() . '<br/>';
return 'Hello,' . $name . '!';
}
}
public function hello(Request $request, $name = 'World')
{
echo '模块:'.$request->module();
echo '<br/>控制器:'.$request->controller();
echo '<br/>操作:'.$request->action();
}

使用助手函数的示例:

<?php
namespace app\index\controller;
class Index
{
public function hello()
{
echo 'GET参数:';
dump(input('get.'));
echo 'GET参数:name';
dump(input('get.name'));
echo 'POST参数:name';
dump(input('post.name'));
echo 'cookie参数:name';
dump(input('cookie.name'));
echo '上传文件信息:image';
dump(input('file.image'));
}
}

响应对象

自动输出xml,json等格式的响应

修改默认输出类型:'default_return_type' => 'json',//或者为xml等(config.php)

然后设计如下控制器:

<?php
namespace app\index\controller;
class Index
{
public function hello()
{
$data = ['name' => 'thinkphp', 'status' => '1'];
return $data;
}
}

输出:

手动输出各种格式响应

不需要配置config.php,直接建立如下控制器即可完成相同输出。

<?php
namespace app\index\controller;
class Index
{
public function hello()
{
$data = ['name' => 'thinkphp', 'status' => '1'];
return json($data);
}
}

也可以手动输出带状态返回码在内的其它信息的响应格式

<?php
namespace app\index\controller;
class Index
{
public function hello()
{
$data = ['name' => 'thinkphp', 'status' => '1'];
return json($data, 201, ['Cache-control' => 'no-cache,must-revalidate']);
}
}

页面跳转方法

<?php
namespace app\index\controller;
class Index
{
use \traits\controller\Jump;
public function index($name='')
{
if ('thinkphp' == $name)
{
$this->success('欢迎使用ThinkPHP5.0','hello');
}
else
{
$this->error('错误的name','guest');
}
}
public function hello()
{
return 'Hello,ThinkPHP!';
}
public function guest()
{
return 'Hello,Guest!';
}
}

以上代码引入的traits\controller\Jump,使用success和error,输出了表情、提示信息,然后3秒跳转到指定的方法。

在traits\controller\Jump中,页面重定向的方法为:

$this->redirect('http://thinkphp.cn');

直接重新定向到指定页面。

系统也提供了助手函数有同样效果:

redirect('http://thinkphp.cn')

  

Thinkphp5.0快速入门笔记(3)的更多相关文章

  1. Thinkphp5.0快速入门笔记(1)

    学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. Composer安装和更新 C ...

  2. Thinkphp5.0快速入门笔记(2)

    学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. 示例建立新的模块和控制器 在a ...

  3. Vue.js2.0快速入门笔记

    vue.js 解耦视图与数据,可复用的组件,前端路由,状态管理,虚拟DOM. MVVM模式:当View(视图层)变化时,会自动更新ViewModel(视图模型),View与ViewModel之间双向绑 ...

  4. keras搭建神经网络快速入门笔记

    之前学习了tensorflow2.0的小伙伴可能会遇到一些问题,就是在读论文中的代码和一些实战项目往往使用keras+tensorflow1.0搭建, 所以本次和大家一起分享keras如何搭建神经网络 ...

  5. ExtJs 6.0+快速入门,ext-bootstrap.js文件的分析,各版本API下载

    ExtJS6.0+快速入门+API下载地址 ExtAPI 下载地址如下,包含各个版本 http://docs.sencha.com/misc/guides/offline_docs.html 1.使用 ...

  6. C#快速入门笔记(1)——基础语法

    C#快速入门笔记(1)——基础语法 总体框架:

  7. python3.5+django2.0快速入门(二)

    昨天写了python3.5+django2.0快速入门(一)今天将讲解配置数据库,创建模型,还有admin的后台管理. 配置数据库 我们打开mysite/mysite/settings.py这个文件. ...

  8. python3.5+django2.0快速入门(一)

    因为这篇教程需要用到anaconda的一些操作,如果还不懂anaconda的操作的同学可以看下这篇文章python 入门学习之anaconda篇. 创建python3+的开发环境 直接在终端输入:co ...

  9. TensorFlow 2.0 快速入门指南 | iBooker·ApacheCN

    原文:TensorFlow 2.0 Quick Start Guide 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则>,生活 ...

随机推荐

  1. SRS之监听端口的管理:RTMP

    1. 监听端口管理的入口函数 监听端口的管理入口在 run_master 函数中,如下: int run_master() { ... if ((ret = _srs_server->liste ...

  2. Linux之bzip2命令

    命令格式: bzip2 [-cdz] 档名 参数: -d :解压缩的参数 -z :压缩的参数 -num 用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--be ...

  3. java初级之数组详解

    一,数组的概念: 数组是为了存储同一种数据多个元素的集合,也可以看成是一个容器,数组既可以存储基本数据类型,也可以存储引用数据类型,数组是为了存储同种数据类型的多个值. 1.1.1,一维数组重点: 数 ...

  4. docker commit命令

    docker commit命令用于基于一个容器来创建一个新的docker镜像. docker commit制作的镜像,除了制定镜像的人知道执行过什么命令,怎么生成的镜像,别人根本无从得知.建议使用的是 ...

  5. linux常用命令(14)which命令

    我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索:    which  查看可执行文件的位置.   whereis 查看文件的位置.    locate   配合数 ...

  6. localStorage基本了解及使用

    以下内容来自: https://www.cnblogs.com/st-leslie/p/5617130.html  感谢大佬的分享 一.什么是localStorage.sessionStorage 在 ...

  7. 记一次flannel调试

    今天发现k8s集群中不同Node上的pod不能互相ping通.调试了很长时间,发现是flannel的问题,记之. 问题一:对flannel backend的选择 flannel支持多种backend, ...

  8. vlc 控件属性和方法

    VLC调研 VLC控件支持的参数和方法 VLC对象列表 Vlc Plugin Object的方法 l        VersionInfo:成员, 返回版本信息的字符串 l        vlc.ve ...

  9. caoz的梦呓:所谓打破信息不对称,其实是一种幻觉

    猫宁!!! 参考链接:https://mp.weixin.qq.com/s/UzSyrhe0Vck7ItN-XU6JEg 很多创业者说,要建立怎样一个平台,要打破信息不对称,大部分时候,我都会泼冷水, ...

  10. HCL试验5

    PC端配置:配置ip地址 交换机1配置:①创建VLAN system-view vlan 10 vlan 20 ②配置PC端接口 interface gi 1/0/1 port link-type a ...