2009-07-15 8 views
8

से मिलान कर सकता हूं, मैं कुछ PHP ढांचे की खोज कर रहा हूं और वर्तमान फ्रंट धावक कोहाना है।क्या मैं कोहाना में रूट्स को केवल विशेष HTTP विधियों (जीईटी/पोस्ट/आदि) से मेल खाने के लिए

रेल पृष्ठभूमि होने के बाद मैं रेल समुदाय को "रीस्टफुल" मार्गों के बारे में बताता हूं। तो एक "जीईटी/पोस्ट" सभी पदों को प्रदर्शित करता है और पोस्ट नियंत्रक के सूचकांक विधि द्वारा संभाला जाता है। एक "पोस्ट/पोस्ट" एक नई पोस्ट ऑब्जेक्ट बनाता है और पोस्ट कंट्रोलर की एक अलग विधि द्वारा संभाला जाता है।

चूंकि इन दोनों अनुरोधों में पथ समान है, राउटर को HTTP विधि के आधार पर निर्णय लेने की आवश्यकता है।

क्या कोहाना में राउटर ऐसा करने में सक्षम है?

उत्तर

8

कोहाना डिफ़ॉल्ट रूप से रीस्टफुल मार्गों का समर्थन नहीं करता है, लेकिन RESTful मॉड्यूल है जो इसके लिए समर्थन जोड़ता है। उपयोग के लिए RESTful wiki देखें।

कोहाना v3.x सीधे कस्टमास्ट नियंत्रकों का समर्थन करता है। Controller के बजाय बस Controller_REST का विस्तार करें और सभी मार्ग कार्रवाई अनुरोध विधि होगी। (ए POST अनुरोध, action_post को लक्षित किया जाएगा आदि)

+0

3,2 के रूप में, Controller_REST नियंत्रक Kohana कोर से हटा दिया गया था के रूप में यह बहुत RESTful नहीं था। देखें: http://forum.kohanaframework.org/discussion/9004/kohana-rest-controller/p1 – eipark

2

तुम भी पहले() विधि अपने नियंत्रक के लिए इन पंक्तियों जोड़ सकते हैं:

if ($this->request->method() == "POST") 
{ 
    $this->request->action("post_".$this->request->action()); 
} 

तो GET/नियंत्रक/पदों action_posts द्वारा नियंत्रित किया जाएगा() विधि आपके नियंत्रक में, जबकि POST/नियंत्रक/पदों को action_post_posts() विधि द्वारा संभाला जाएगा।

पुनश्च: में निर्मित Controller_REST Kohana 3.2 में

0

वर्ग निर्माता में HTTP विधि जाँच हो रही है हटा दिया गया था मेरे लिए गरीब डिजाइन की तरह लगता है। रेल की तरह, कोहाना 3.3 राउटर (जहां वे संबंधित हैं) में विश्वसनीय मार्ग बना सकते हैं।

Kohana 3.3 Route Filters के लिए प्रलेखन देखें।

यहाँ एक उदाहरण है:

Route::set('Posts', 'posts/<id>', array('id' => '\d+')) 
    ->filter(function($route, $params, $request) { 
    $params['action'] = strtolower($request->method()); 
    return $params; 
    }) 
    ->defaults(array(
    'controller' => 'Post', 
)); 
संबंधित मुद्दे

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