专栏首页嘘、小点声Thinkphp5.0快速入门笔记(3)

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

学习来源与说明

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')

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CanHackMe | CTF平台搭建记录

    在Github上发现了一个开源的CTF平台,界面很好看,而且是php写的,所以决定搭建一下折腾折腾。

    天钧
  • 虚拟主机能用宝塔服务器管理系统吗?

    虚拟主机能用宝塔吗?不可以的,宝塔面板是一款服务器运维管理面板,云服务器的话可以借助宝塔用来管理维护,而虚拟主机不能。其实也不需要,主要有以下几点:

    用户6191802
  • Linux 的 Crond(二)

    最近由于工作中用到了crond,之前对crond不是很了解,只知道咋用,但是这次需要考虑好多情况,所以又深入了解了一下crond,下面就以下几个问题来谈谈cro...

    lin_zone
  • 腾讯面试官是这样问布隆过滤器的

    假设遇到这样一个问题:一个网站有 20 亿 url 存在一个黑名单中,这个黑名单要怎么存?若此时随便输入一个 url,你如何快速判断该 url 是否在这个黑名单...

    用户2769421
  • TIOBE 9 月排行榜:Java没有悬念,PHP 正努力保住前十位置

    自 2001 年 TIOBE 指数开始以来, PHP 始终保持在榜单的前 10 位。它甚至是 2004 年 TIOBE 的年度编程语言。直到 2009 年底,一...

    奋斗蒙
  • phar相关安全知识总结

    我是头回学习到phar RCE的相关知识,通过这次的SUCTF,通过复现大佬们所说的知识,发现了很多有意思的东西,过来记录一下,同时也总结了一些phar序列化的...

    用户5878089
  • NATS用Go入门实践

    NATS系统通常由具有nats或tls协议的标准URL标识,例如, NATS://demo.nats.io。NATS系统可以是单个服务器,小型集群或全局超级集群...

    陌无崖
  • CTF从入门到提升(十五)自包含

    1、Phpinfo()包含文件返回临时文件名,我们是在文件上传环节进行包含,如果不删除临时文件我们可以生成临时文件,

    牛油果
  • 如何通过爬虫爬取公众号的活跃度

    这篇文章主要来介绍下如何通过爬虫技术来爬取测试相关公众号的信息,接着通过对爬取的信息进行过滤处理给出测试公众号活跃度的一个列表。这里活跃度会以月发文的数量来进行...

    测试邦
  • NATS多种连接Golang实践

    如果因为任何原因断开连接,大多数(如果不是全部)客户端库将重新连接到NATS系统。重新连接逻辑可能因库而异,因此请检查客户端库的文档。

    陌无崖

扫码关注云+社区

领取腾讯云代金券