2011-06-01 8 views
18

के साथ उपयोग कैसे करें मैं backbone.js में देख रहा हूं और मुझे लगता है कि मॉडल डेटा को सहेजने के लिए इसे php के साथ संवाद कैसे प्राप्त किया जाए। यह एक अनुरोध भेजता है, लेकिन मुझे लगता है कि अनुरोध है कि क्या यह "बनाएँ" हो, "अपडेट" कैसे प्राप्त कर सकता हूं, "पढ़ें", "हटाएँ" आदिBackbone.js PHP

धन्यवाद

+1

एक आरईएसटी एपीआई का पर्दाफाश करें। – Raynos

+0

मैंने कभी ऐसा नहीं किया है इससे पहले कि मैं इसके बारे में कैसे जा सकता हूं? – brenjt

+0

[इन लोगों से पूछें] (http://chat.stackoverflow.com/rooms/11/php) – Raynos

उत्तर

15

एक अन्य विकल्प जिसे आप विचार कर सकते हैं वह एक पूर्व-पैक किए गए रीस्टफुल फ्रेमवर्क के साथ रोल करना है जिसमें आपके बैकबोन सर्वर प्रश्नों को निष्पादित करने के लिए बनाए गए सभी आवश्यक फ़ंक्शन हैं। मेरा निजी पसंदीदा है।

कुछ सरल नमूना कोड (एक बार आपके पास स्लिम पीएचपी सेटअप होता है) आपके बैकबोन कॉल को इस तरह दिखने के लिए उपयोग किया जाता है।

$app->get('/user', function() use ($app) { 

    // See if session is set, get user info as array 
    if (isset($_SESSION['userID']) { 
     $user = // grab user with userID data from DB 
    } 

    // Respond to the get request with a json object 
    $response = $app->response; 
    $response['Content-Type'] = 'application/json'; 
    $response->body(json_encode($user)); 
} 

यहां एक पोस्ट उदाहरण है जो बैकबोन जेसन को सरणी में बदल देता है।

// Middleware that detects type of data and converts it to something usable 
$app->add('Slim_Middleware_ContentTypes'); // JSON to associative array 

... 

$app->post('/message', function() use ($app) { 
    $dataIn = $app->request()->getBody(); 

    ... 

    // Save to DB $dataIn['message'], $dataIn['author'], etc. 
} 

यहां कुछ पैरामीटर का उपयोग करके एक पुट उदाहरण है।

$app->put('/user/:id', function($id) use ($app) { 

    // Find appropriate user from DB that has $id as ID 

    $dataIn = $app->request()->getBody(); 

    // Save to DB $dataIn['name'], $dataIn['age'], etc. 
} 

और यहां एक डिलीट है।

$app->delete('/message/:id', function($id) use ($app) { 

    // Find appropriate message from DB that has $id as ID 

    // Delete message with id of $id 
} 

हालांकि यह सभी अन्य बातों की एक विस्तृत उदाहरण पर विचार करने के लिए नहीं है, यह आप खुले समाधान के प्रकार की एक विचार पहले से ही वहाँ बाहर आप का उपयोग करने के लिए देना चाहिए। मुझे व्यक्तिगत रूप से स्लिम पसंद है क्योंकि यह बहुत हल्का, सरल है, फिर भी इसमें सभी सुविधाएं हैं जो आप एक विश्वसनीय सर्वर में चाहते हैं। प्रोटोटाइप के लिए बढ़िया। इसे डीबी एब्स्ट्रक्शन लेयर और कुछ अन्य टूल्स के साथ संयोजित करें और आप जो भी जल्दी चाहते हैं उसके बारे में कुछ भी कर सकते हैं।

आप यहाँ इन पंक्तियों के साथ कुछ अन्य नमूना कोड देख सकते हैं:

  1. How to post Backbone model to server
  2. Ways to save Backbone data

और यहाँ कुछ अन्य पीएचपी के लिए एक लिंक आधारित RESTful समाधान है: Framework List

8

backbone.js के मॉडल के लिए विशिष्ट यूआरएल का उपयोग करता है डेटा प्राप्त करें और भेजें। आपको यह सुनिश्चित करना होगा कि वहां एक PHP स्क्रिप्ट है।

अब दो संभावनाएं हैं।

सबसे पहले, विधि अतिरिक्त चर के रूप में $ _POST के अंदर भेज दी गई है। दूसरे, आप इस्तेमाल किया अनुरोध विधि (प्राप्त, पोस्ट, PUT, DELETE) जो आप $_SERVER['REQUEST_METHOD']

अब के साथ सरल करता है, तो-और कुछ का उपयोग कर सकते कर सकते हैं या अनुरोध को पूरा करने के बयानों स्विच और आवश्यक डेटा देने के लिए देखो करने के लिए है जैसा कि मुझे लगता है जेसन।

+0

ठीक है, अब Backbone.js एपीआई को देखने से यह AJAX अनुरोध के साथ दिखता है यह डेटा भेजता है जो एक स्ट्रिंग मॉडल है । मैं उस जानकारी को कैसे प्राप्त करूं? $ _SERVER ['मॉडल'] या कुछ समान है? – brenjt

+0

या मुझे लगता है कि मेरा सवाल यह है कि मैं बैकबोन के साथ सहेजे जा रहे मॉडल के डेटा तक कैसे पहुंच सकता हूं? या यह अजाक्स अनुरोध के साथ भी पारित हो जाता है? – brenjt

+0

मैं '$ ग्लोबल्स [' HTTP_RAW_POST_DATA '] के साथ JSON एन्कोडेड मॉडल स्ट्रिंग प्राप्त करने में सक्षम था' क्या यह इस तरह से सुरक्षित है या नहीं? – brenjt

3

$ ग्लोबल ['HTTP_RAW_POST_DATA'] मेरे लिए ठीक काम करता है, मुझे नहीं पता कि print_r ($ _ POST) एनीथिंग प्रिंट नहीं करता है !!

+0

हाँ मैंने देखा कि 'print_r ($ _ POST) ने कुछ भी नहीं किया और मैंने पाया कि' $ ग्लोबल ['HTTP_RAW_POST_DATA'] 'जिसमें मुझे – brenjt

+0

की आवश्यकता है, मैं इस लिंक को देख रहा था http://stackoverflow.com/questions/ 5755074/एक-आराम-दृढ़ता-समाधान-उपयोग करने योग्य-साथ-बैकबोन-जेएस-इन-पीएचपी लेकिन मुझे समझ में नहीं आया। – Gabriel

+0

हाँ..उसने मेरे लिए भी काम किया। कृपया इसे समझाएं। –

2

आपकी PHP स्क्रिप्ट में आपके पास PUT और DELETE विधियों के लिए यह होगा क्योंकि आप उन्हें फ़िल्टर कर सकते हैं: $_SERVER['REQUEST_METHOD']

parse_str(file_get_contents("php://input"),$post_vars); 

हैं अनुरोध पोस्ट है या प्राप्त आप इसे सामान्य रूप से उपयोग कर सकते हैं, लेकिन अगर अनुरोध डाल या हटाएं होता है तो इसके बाद के संस्करण लाइन का उपयोग और इसलिए आप के साथ वार्स के लिए उपयोग कर सकते हैं:

$post_vars['fruit'] for example... 

जब आप रीढ़ की हड्डी को जवाब देने के लिए तैयार कर रहे हैं, आप केवल पहले सही हेडर करना है:

header('Content-type: application/json; charset=utf-8'); 

और आप json के साथ जवाब देने के सांकेतिक शब्दों में बदलना:

echo json_encode(array("message"=>"missing fields","status"=>200));