[Php] التعامل مع وسيطات حذف / حذف في فب


Answers

هنا بعض التعليمات البرمجية التي قد تكون مفيدة للآخرين الذين يرغبون في التعامل مع بوت و ديليت بارامز. كنت قادرا على تعيين $_PUT و $_DELETE عبر $_DELETE $GLOBALS[] ، لكنها لن تكون متاحة مباشرة في وظائف ما لم تعلن global أو الوصول إليها عبر $GLOBALS[] . للتغلب على هذا، لقد جعلت فئة بسيطة لقراءة الحجج طلب / بوست / بوت / ديليت طلب. هذا أيضا بملء $_REQUEST مع بوت / $_REQUEST .

سوف تقوم هذه الفئة بتحليل معلمات بوت / ديليت ودعم جيت / بوست كذلك.

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

أنا أعمل على بلدي مكتبة العميل ريست ل كوديغنيتر وأنا تكافح من أجل العمل على كيفية إرسال حجج بوت وحذف في فب.

في أماكن قليلة رأيت أشخاصا يستخدمون الخيارات:

$this->option(CURLOPT_PUT, TRUE);
$this->option(CURLOPT_POSTFIELDS, $params);

ومن المثير للقلق، هذا يبدو أن تفعل شيئا. هل هذه هي الطريقة الصحيحة لتعيين معلمات بوت؟

إذا كان الأمر كذلك، كيف يمكنني تعيين المعلمات ديليت؟

$ this-> أوبتيون () جزء من مكتبتي، فإنه يبني ببساطة مجموعة من الثوابت CURLOPT_XX ويرسلها إلى curl_setopt_array () عند تنفيذ طلب كورل المبني.

أنا أحاول قراءة معلمات بوت و ديليت باستخدام التعليمات البرمجية التالية:

        case 'put':
            // Set up out PUT variables
            parse_str(file_get_contents('php://input'), $this->_put_args);
        break;

        case 'delete':
            // Set up out PUT variables
            parse_str(file_get_contents('php://input'), $this->_delete_args);
        break;

هناك خياران هنا، وأنا تقترب من هذا بطريقة خاطئة أو هناك خلل في مكان ما في المكتبات بلدي. إذا كنت قد اسمحوا لي أن أعرف إذا كان هذا العمل نظريا يمكن أن مجرد مطرقة بعيدا على التصحيح حتى حلها.

أنا لا أريد أن نضيع المزيد من الوقت على النهج الذي هو في الأساس خطأ.




أعتقد أنك خلط الأفعال الخاصة بك - بوت هو لوضع ملف، بوست هو لنشر المتغيرات (على الرغم من أنه يمكنك بعد ملف).

لتعيين متغيرات المشاركات، استخدم CURLOPT_POSTFIELDS مع سلسلة من param1=val1&param2=val2 أو صفيف param1=val1&param2=val2 .

للقيام CURLOPT_CUSTOMREQUEST ، ستحتاج إلى استخدام خيار CURLOPT_CUSTOMREQUEST




هذا هو نسختي من ديليت ل سي. وهو يقبل الحجج على غرار جيت ل ديليت، حتى نفس الوسيطات الاسم، أي: جيت / سوم / ورل؟ إد = 1 & إد = 2 & إد = 3

protected function _parse_delete()
{
    $query = $_SERVER['QUERY_STRING'];
    if ( !empty( $query ) )
    {
        foreach( explode('&', $query ) as $param )
        {
            list($k, $v) = explode('=', $param);
            $k = urldecode($k);
            $v = urldecode($v);
            if ( isset( $this->_delete_args[$k] ) )
            {
                if ( is_scalar( $this->_delete_args[$k] ) )
                {
                    $this->_delete_args[$k] = array( $this->_delete_args[$k] );
                }
                $this->_delete_args[$k][] = $v ;
            }
            else
            {
                $this->_delete_args[$k] = $v;
            }
        }
    }
}