Handling PUT/DELETE arguments in PHP

前端 未结 6 1252
盖世英雄少女心
盖世英雄少女心 2020-11-30 21:30

I am working on my REST client library for CodeIgniter and I am struggling to work out how to send PUT and DELETE arguments in PHP.

In a few places I have seen peopl

6条回答
  •  离开以前
    2020-11-30 22:30

    Here is some code which may be helpful for others wanting to handle PUT and DELETE params. You are able to set $_PUT and $_DELETE via $GLOBALS[], but they will not be directly accessible in functions unless declared global or accessed via $GLOBALS[]. To get around this, I've made a simple class for reading GET/POST/PUT/DELETE request arguments. This also populates $_REQUEST with PUT/DELETE params.

    This class will parse the PUT/DELETE params and support GET/POST as well.

    class Params {
      private $params = Array();
    
      public function __construct() {
        $this->_parseParams();
      }
    
      /**
        * @brief Lookup request params
        * @param string $name Name of the argument to lookup
        * @param mixed $default Default value to return if argument is missing
        * @returns The value from the GET/POST/PUT/DELETE value, or $default if not set
        */
      public function get($name, $default = null) {
        if (isset($this->params[$name])) {
          return $this->params[$name];
        } else {
          return $default;
        }
      }
    
      private function _parseParams() {
        $method = $_SERVER['REQUEST_METHOD'];
        if ($method == "PUT" || $method == "DELETE") {
            parse_str(file_get_contents('php://input'), $this->params);
            $GLOBALS["_{$method}"] = $this->params;
            // Add these request vars into _REQUEST, mimicing default behavior, PUT/DELETE will override existing COOKIE/GET vars
            $_REQUEST = $this->params + $_REQUEST;
        } else if ($method == "GET") {
            $this->params = $_GET;
        } else if ($method == "POST") {
            $this->params = $_POST;
        }
      }
    }
    

提交回复
热议问题