2013-10-05 10 views
9

की आवश्यकता को हटा दें मैं एक आरईएसटी एपीआई बनाने पर काम कर रहा हूं जो केवल जेएसओएन डेटा प्राप्त करेगा और वापस करेगा। के बाद सेकेकफ़्प आरईएसटी एपीआई .format

GET  /recipes.format 
GET  /recipes/123.format 
POST /recipes.format 
PUT  /recipes/123.format 
DELETE /recipes/123.format 
POST /recipes/123.format 

हालांकि, मैं वास्तव में ".format" का उपयोग करने की आवश्यकता नापसंद (".json" मेरे मामले में):

मैं केक गाइड अनुसरण कर रहे मेरा डिफ़ॉल्ट मार्गों इस तरह कर रहे हैं मैं कभी भी जेसन स्वीकार करूँगा।

मुझे लगता है कि इस आवश्यकता को दूर करने का एक तरीका होना चाहिए। मैं URLS को फिर से लिखने के लिए .htaccess का उपयोग कर सकता था, लेकिन मुझे लगता है कि कहीं केक सेटिंग/कॉन्फ़िगरेशन फ़ाइल में ऐसा करने का कोई तरीका होना चाहिए।

संक्षेप में, मैं GET /recipes पर abe होना चाहता हूं और इसे GET /recipes.json के समान ही आउटपुट करना चाहता हूं।

धन्यवाद!

उत्तर

15

मुझे लगता है कि आप RequestHandler component का उपयोग कर रहे हैं। एक तरह से तो अपने नियंत्रकों में extension हार्डकोड करने beforeFilter() कॉलबैक होगा:

public function beforeFilter() 
{ 
    parent::beforeFilter(); 
    $this->RequestHandler->ext = 'json'; 
} 

इस तरह यह हमेशा JSON देखें और उचित प्रतिक्रिया हेडर का प्रयोग करेंगे, भले ही extension parsing सक्षम किया गया है और एक गैर .json विस्तार आपूर्ति की गई थी यूआरएल में

एक अन्य विकल्प आपके व्यक्तिगत नियंत्रक कार्यों में RequestHandlerComponent::renderAs() उपयोग करने के लिए होगा:

public function index() 
{ 
    $this->RequestHandler->renderAs($this, 'json'); 
    ... 
} 

कि एक ही प्रभाव होता है, लेकिन आप अपने कार्यों के सभी में यह करने के लिए की आवश्यकता होगी, के मामले में तो नियंत्रकों केवल उद्देश्य आरईएसटी अनुरोधों को संभालना है, आप शायद विस्तार को ओवरराइड करने से बेहतर हैं।

+0

दोनों बहुत अच्छी तरह से और बस काम करते हैं। बहुत बहुत धन्यवाद, मुझे लगता है कि मैं पहले से भरने के लिए खत्म होने जा रहा हूँ। बहुत आसान, धन्यवाद! – Thomas

+0

wtf? यह हर आरईएसटी मैनुअल में क्यों गुम है? मेरे लिए काम। बहुत बहुत धन्यवाद :) – west44

+0

केक 3.2 – Rito

4

सबसे पहले, routes.php फ़ाइल में अपना राउटर सेट करें।

Router::parseExtensions("json");

फिर नियंत्रक से RequestHandler घटक जोड़ने (यह HTTP हेडर और सही देखें कक्षा का चयन करके स्वत: माइम प्रकार मान्यता के लिए आवश्यक है)।

public $components = array('RequestHandler');

अब, आप, HTTP को निर्दिष्ट एक ही प्रभाव के साथ Accept हैडर द्वारा .json विस्तार, या के साथ किसी भी नियंत्रक विधि से क्वेरी JSON प्राप्त करने में सक्षम हैं के बिना विस्तार निर्दिष्ट किया जाना चाहिए।

curl -H "Accept: application/json" http://example.com/recipies

+0

के साथ ठीक काम करता है यह अच्छी तरह से काम करता है, धन्यवाद, हालांकि मैं अंततः एनडीएम द्वारा प्रदान किए गए समाधान के साथ रोलिंग कर रहा हूं क्योंकि यह प्रत्येक अनुरोध के साथ अतिरिक्त शीर्षलेख भेजने की आवश्यकता को अस्वीकार करता है। हालांकि धन्यवाद! – Thomas

संबंधित मुद्दे