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


    学习来源与说明

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

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

    快速入门第三节

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

    继承thinkController

    <?php
    namespace appindexcontroller;
    use thinkController;
    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 appindexcontroller;
    use thinkRequest;
    class Index
    {
        public function hello(Request $request, $name = 'World')
        {
        // 获取当前URL地址 不含域名
        echo 'url: ' . $request->url() . '<br/>';
        return 'Hello,' . $name . '!';
        }
    }
    

    使用助手函数

    系统提供的方法

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

    动态绑定属性

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

    制作Base控制器:

    <?php
    namespace appindexcontroller;
    use appindexmodelUser;
    use thinkController;
    use thinkRequest;
    use thinkSession;
    class Base extends Controller
    {
        public function _initialize()
        {
            $user = User::get(Session::get('user_id'));
            Request::instance()->bind('user',$user);
        }
    }
    

    其它控制器中调用:

    <?php
    namespace appindexcontroller;
    use appindexcontrollerBase;
    use thinkRequest;
    class Index extends Base
    {
        public function index(Request $request)
        {
            echo $request->user->id;
            echo $request->user->name;
        }
    }
    

    获取请求变量

    参数信息与输出:

    <?php
    namespace appindexcontroller;
    use thinkRequest;
    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 appindexcontroller;
    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 appindexcontroller;
    use thinkRequest;
    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 appindexcontroller;
    use thinkRequest;
    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 appindexcontroller;
    use thinkRequest;
    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 appindexcontroller;
    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 appindexcontroller;
    class Index
    {
        public function hello()
        {
            $data = ['name' => 'thinkphp', 'status' => '1'];
            return $data;
        }
    }
    

    输出:

    手动输出各种格式响应

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

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

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

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

    页面跳转方法

    <?php
    namespace appindexcontroller;
    class Index
    {
        use 	raitscontrollerJump;
        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!';
        }
    }
    

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

    在traitscontrollerJump中,页面重定向的方法为:

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

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

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

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

      

  • 相关阅读:
    三线程连续打印ABC
    Mybatis知识点总结
    【刷题】LeetCode 292 Nim Game
    Java界面编程-建立一个可以画出图形的简单框架
    第11章 持有对象
    第10章 内部类
    构造器和多态(Chapter8.3)
    对象的创建过程(chapter5.7.3)
    静态数据的初始化(Chapter5.7.2)
    final关键字
  • 原文地址:https://www.cnblogs.com/bai2018/p/11355036.html
Copyright © 2020-2023  润新知