前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Thinkphp5.0快速入门笔记(3)

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

作者头像
嘘、小点声
发布2019-09-29 15:58:30
3480
发布2019-09-29 15:58:30
举报
文章被收录于专栏:嘘、小点声

学习来源与说明

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

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

快速入门第三节

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

继承think\Controller

代码语言:javascript
复制
<?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。

效果:

自动注入请求对象

方法带入形参

代码语言:javascript
复制
<?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 . '!';
    }
}

使用助手函数

系统提供的方法

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

动态绑定属性

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

制作Base控制器:

代码语言:javascript
复制
<?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);
    }
}

其它控制器中调用:

代码语言:javascript
复制
<?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;
    }
}

获取请求变量

参数信息与输出:

代码语言:javascript
复制
<?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()

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

过滤变量

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

获取其它参数

代码语言:javascript
复制
<?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'));
    }
}
代码语言:javascript
复制
<?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']));
    }
}
代码语言:javascript
复制
<?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 . '!';
    }
}
代码语言:javascript
复制
public function hello(Request $request, $name = 'World')
{
echo '模块:'.$request->module();
echo '<br/>控制器:'.$request->controller();
echo '<br/>操作:'.$request->action();
}

使用助手函数的示例:

代码语言:javascript
复制
<?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)

然后设计如下控制器:

代码语言:javascript
复制
<?php
namespace app\index\controller;
class Index
{
    public function hello()
    {
        $data = ['name' => 'thinkphp', 'status' => '1'];
        return $data;
    }
}

输出:

手动输出各种格式响应

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

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

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

代码语言:javascript
复制
<?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']);
    }
}

页面跳转方法

代码语言:javascript
复制
<?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中,页面重定向的方法为:

代码语言:javascript
复制
$this->redirect('http://thinkphp.cn');

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

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

代码语言:javascript
复制
redirect('http://thinkphp.cn')
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 学习来源与说明
  • 获取当前的请求信息的四种方案
    • 继承think\Controller
      • 自动注入请求对象
        • 使用助手函数
          • 动态绑定属性
          • 获取请求变量
            • 参数信息与输出:
              • 使用input助手函数代替$request->param()
                • 过滤变量
                  • 获取其它参数
                  • 响应对象
                    • 自动输出xml,json等格式的响应
                      • 手动输出各种格式响应
                      • 页面跳转方法
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档