zoukankan      html  css  js  c++  java
  • thinkphp5.0学习笔记(三)获取信息,变量,绑定参数

    1.构造函数:

    控制器类必须继承了 hinkController类,才能使用:

    方法_initialize

    代码:

    <?php
    namespace appliancontroller;
    use thinkController;
    use thinkDb;
    use thinkRequest;
    
    class Index extends Controller
    {   
    public function _initialize()
        {
            echo 'init|||';
        }
        
        public function hello()
        {
            return 'hello';
        }
    }

    地址:http://localhost/index.php/lian/index/hello

    看输出:

    2.前置方法:

    ['except' => '方法名,方法名']:
    

    表示这些方法不使用前置方法,

    ['only' => '方法名,方法名']:
    

    表示只有这些方法使用前置方法。

    *********************************分割线************************************

    beforeActionList属性可以指定某个方法为其他方法的前置操作;

    即执行之前执行;

    代码:

    <?php
    namespace appliancontroller;
    use thinkController;
    use thinkDb;
    use thinkRequest;
    
    class Index extends Controller
    {
    
    protected $beforeActionList = [
            'first',
            'second' =>  ['except'=>'hello'],
            'three'  =>  ['only'=>'hello'],
        ];
        
        protected function first()
        {
            echo 'first<br/>';
        }
        
        protected function second()
        {
            echo 'second<br/>';
        }
        
        protected function three()
        {
            echo 'three<br/>';
        }
    
        public function hello()
        {
            return 'hello';
        }
        
    
        
    }

    看下输出:

    本该只输出hello的,却因为前置操作,输出了three方法;

    注意:这种操作,方法名必须小写;

    3.获取URL信息

    <?php
    namespace appliancontroller;
    use thinkController;
    use thinkDb;
    use thinkRequest;
    
    class Index extends Controller
    {
    public function index(){
    $request = Request::instance();
    // 获取当前域名
    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/>';  
    }
    }

    4.操作变量

    获取PARAM变量

    PARAM变量是框架提供的用于自动识别GETPOST或者PUT请求的一种变量获取方式,是系统推荐的获取请求参数的方法,用法如下:

    可以通过Request对象完成全局输入变量的检测、获取和安全过滤~

    // 获取当前请求的name变量
    Request::instance()->param('name');
    // 获取当前请求的所有变量(经过过滤)
    Request::instance()->param();
    // 获取当前请求的所有变量(原始数据)
    Request::instance()->param(false);
    // 获取当前请求的所有变量(包含上传文件)
    Request::instance()->param(true);
    //获取REQUEST变量
    Request::instance()->request('id'); // 获取某个request变量
    Request::instance()->request(); // 获取全部的request变量(经过过滤)
    Request::instance()->request(false); // 获取全部的request原始变量数据

    5.绑定参数

    参数绑定方式默认是按照变量名进行绑定;

    <?php
    public function read($id)
    {
        return 'id ='.$id;
        
    }
    public function archive($year = '2017',$month = '07')
    {
        return 'year ='.$year.'$month ='.$month;
    }

    输入网址:

    http://localhost/index.php/lian/index/read/id/544

    输出:

    按照变量名进行参数绑定的参数必须和URL中传入的变量名称一致,但是参数顺序不需要一致

    如果报出以上错误,报错的原因很简单,因为在执行read操作方法的时候,id参数是必须传入参数的,但是方法无法从URL地址中获取正确的id参数信息。由于我们不能相信用户的任何输入,因此建议你给read方法的id参数添加默认值

    6.请求类型

    ThinkPHP5.0 统一采用 thinkRequest类 处理请求类型。

    获取请求类型:

    public function hq()
    {
    // 是否为 GET 请求
    if (Request::instance()->isGet()) echo "当前为 GET 请求";
    // 是否为 POST 请求
    if (Request::instance()->isPost()) echo "当前为 POST 请求";
    // 是否为 PUT 请求
    if (Request::instance()->isPut()) echo "当前为 PUT 请求";
    // 是否为 DELETE 请求
    if (Request::instance()->isDelete()) echo "当前为 DELETE 请求";
    // 是否为 Ajax 请求
    if (Request::instance()->isAjax()) echo "当前为 Ajax 请求";
    // 是否为 Pjax 请求
    if (Request::instance()->isPjax()) echo "当前为 Pjax 请求";
    // 是否为手机访问
    if (Request::instance()->isMobile()) echo "当前为手机访问";
    // 是否为 HEAD 请求
    if (Request::instance()->isHead()) echo "当前为 HEAD 请求";
    // 是否为 Patch 请求
    if (Request::instance()->isPatch()) echo "当前为 PATCH 请求";
    // 是否为 OPTIONS 请求
    if (Request::instance()->isOptions()) echo "当前为 OPTIONS 请求";
    // 是否为 cli
    if (Request::instance()->isCli()) echo "当前为 cli";
    // 是否为 cgi
    if (Request::instance()->isCgi()) echo "当前为 cgi";
        
    }
  • 相关阅读:
    到底该不该熟悉掌握struts2的ONGL呢?
    struts2 request内幕 为什么在struts2用EL表达式可以取值
    struts2 权限拦截器 拦截没有登陆的请求
    tomcat context 配置 项目部署
    tomcat 设置默认编码格式
    工作记录1
    javascript 的学习笔记(第一天)
    JavaScript for...in 循环
    indexof方法区分大小写
    java 和 IntelliJ IDEA 的一些配置
  • 原文地址:https://www.cnblogs.com/xuan584521/p/7049930.html
Copyright © 2011-2022 走看看