2011-04-04 20 views
8

के साथ एक PUT अनुरोध प्राप्त मैं CodeIgniter के साथ अभी एक समस्या है: मैं REST Controller library का उपयोग (जो सचमुच कमाल है) एक API बनाने के लिए, लेकिन मैं अनुरोध डाल नहीं मिल सकता है ...Codeigniter

यह मेरा कोड है :

curl -i -X PUT -d "username=test" http://[...]/user/id/1 

user_id भरा हुआ है, लेकिन उपयोगकर्ता नाम चर खाली है:

function user_put() { 
    $user_id = $this->get("id"); 
    echo $user_id; 
    $username = $this->put("username"); 
    echo $username; 
} 

मैं अनुरोध करने के लिए कर्ल का उपयोग करें। फिर भी यह क्रियाओं के साथ काम करता है और प्राप्त करता है। क्या आपको कोई विचार है?

धन्यवाद!

+0

अरे @Shatter आप कभी भी इस की पुष्टि करने के लिए एक मौका मिला? – jcolebrand

+0

अभी भी छोटी गाड़ी, $ this-> डाल दें ('कुछ भी') झूठी – Syl

उत्तर

10

के अनुसार: http://net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2/ हम https://github.com/philsturgeon/codeigniter-restserver/blob/master/application/libraries/REST_Controller.php#L544 परामर्श देखने के लिए कि इस विधि चाहिए:

/** 
* Detect method 
* 
* Detect which method (POST, PUT, GET, DELETE) is being used 
* 
* @return string 
*/ 
protected function _detect_method() { 
    $method = strtolower($this->input->server('REQUEST_METHOD')); 

    if ($this->config->item('enable_emulate_request')) { 
    if ($this->input->post('_method')) { 
     $method = strtolower($this->input->post('_method')); 
    } else if ($this->input->server('HTTP_X_HTTP_METHOD_OVERRIDE')) { 
     $method = strtolower($this->input->server('HTTP_X_HTTP_METHOD_OVERRIDE')); 
    }  
    } 

    if (in_array($method, array('get', 'delete', 'post', 'put'))) { 
    return $method; 
    } 

    return 'get'; 
} 

देखने के लिए अगर हम HTTP हेडर HTTP_X_HTTP_METHOD_OVERRIDE परिभाषित किया है लग रहा है और यह का उपयोग करता है वास्तविक क्रिया के पक्ष में हम है वेब पर लागू किया गया। एक अनुरोध में इसका उपयोग करने के लिए आप एक कस्टम विधि ओवरराइड उत्पन्न करने के लिए हेडर X-HTTP-Method-Override: method (इसलिए X-HTTP-Method-Override: put) निर्दिष्ट करेंगे। कभी-कभी ढांचे X-HTTP-Method-Override के बजाय X-HTTP-Method की अपेक्षा करता है, इसलिए यह ढांचे के अनुसार बदलता है।

आप jQuery के माध्यम से इस तरह का अनुरोध कर रहे थे, तो आप अपने ajax अनुरोध में यह हिस्सा एकीकृत होगा:

beforeSend: function (XMLHttpRequest) { 
    //Specify the HTTP method DELETE to perform a delete operation. 
    XMLHttpRequest.setRequestHeader("X-HTTP-Method-Override", "DELETE"); 
} 
-1

कोडइग्निटर आने वाले PUT अनुरोधों को पढ़ने का समर्थन नहीं करता है और यदि यह आवश्यक नहीं है तो मैं आपके एपीआई के लिए जीईटी/POST के लिए चिपकना चाहूंगा क्योंकि यह संभवतः आवश्यक नहीं है।

यदि आपको PUT अनुरोध पढ़ने की आवश्यकता है तो Accessing Incoming PUT Data from PHP पर एक नज़र डालें।

+0

देता है यह अप्रैल 2011 में सटीक हो सकता है, लेकिन यह वर्तमान में सटीक नहीं है। – jcolebrand

2

आप विधि प्रकार पहले विभिन्न मामलों का पता लगाने और अलग करने की कोशिश कर सकते हैं। यदि आपका नियंत्रक केवल आरईएसटी कार्यों को संभालता है तो यह कन्स्ट्रक्टर में आवश्यक जानकारी प्राप्त करने में मददगार हो सकता है।

switch($_SERVER['REQUEST_METHOD']){ 
    case 'GET': 
     $var_array=$this->input->get(); 
     ... 
     break; 
    case 'POST': 
     $var_array=$this->input->post(); 
     ... 
     break; 
    case 'PUT': 
    case 'DELETE': 
     parse_str(file_get_contents("php://input"),$var_array); 
     ... 
     break; 
    default: 
     echo "I don't know how to handle this request."; 
}