美文网首页PHP
【TP5-03】请求和响应

【TP5-03】请求和响应

作者: Geeks_Chen | 来源:发表于2017-09-22 09:11 被阅读41次

    1、请求对象

    Request 对象的作用是与客户端交互,收集客户端的Form、cookie、超链接,或者收集服务器端的环境变量。

    Request对象是从客户端向服务端发出请求,包括用户提交的信息以及客户端的一些信息。客户端可以通过Form表单或者在网页地址后边拼接参数提交数据。然后通过Request对象的相关方法来获取这些数据。Request的各种方法主要用来处理客户端浏览器提交的请求中的各项参数和选项。

    Request对象的一个主要职责是统一和更安全的获取当前的请求信息。

    2、自动注入请求对象

    如果控制器没有继承think\controller,则可以使用Request对象注入的方式来简化调用,任何情况下都适用,也是系统建议的方式。

    <?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 . '!';
        }
    }
    

    3、动态绑定属性

    可以给Request请求对象绑定属性,方便全局调用,我们可以在公共的控制器中绑定当前登录的用户模型到请求对象:

    <?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;
        }
    }
    

    4、使用系统助手函数

    如果既没有继承think\Controller 也不想给操作添加额外的Request 对象参数,可以使用助手函数。

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

    5、获取请求变量

    系统推荐使用param方法统一获取当前请求变量,该方法最大的优势是让你不需要区分当前请求类型而使用不同的全局变量或者方法,并且可以满足大部分的参数需求。

    6、获取请求参数

    <?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']));
        }
    }
    

    7、响应对象

    Response 对象用于动态响应客户端提示,控制发送给用户的信息,并将动态生成响应。通常用于输出数据给客户端或者浏览器。

    7.1、自动输出
    系统会根据 default_return_type 和 default_ajax_return 配置决定响应输出的类型。
    // 默认输出类型
    'default_return_type' => 'json',

    {"name":"thinkphp","status":"1"}
    

    7.2、手动输出

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

    8、页面跳转

    如果某些简单的页面需要操作提示或重定向,可以引入traits\controller\Jump。

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

    8.1、页面重定向

    namespace app\index\controller;
    
    class Index
    {
        use \traits\controller\Jump;
        
        public function index($name='')
        {
            if ('thinkphp' == $name) {
                $this->redirect('http://thinkphp.cn');
            } else {
                $this->success('欢迎使用ThinkPHP','hello');
            }
        }
        
        public function hello()
        {
            return 'Hello,ThinkPHP!';
        }
    
    }
    

    相关文章

      网友评论

        本文标题:【TP5-03】请求和响应

        本文链接:https://www.haomeiwen.com/subject/xhvnsxtx.html