के माध्यम से डीबी के लिए रीढ़ की हड्डी मॉडल डेटा पोस्ट, मैं कैसे Backbone.js, Slim PHP और Paris/Idiorm एक साथ काम कर सकते हैं की एक समझ पाने के लिए कोशिश कर रहा हूँ और मैं मुसीबत, प्रवाह को पूरा मॉडल के साथ डेटा शुरू करने विशेषता आ रही करने के लिए डेटाबेस के लिए सभी तरह से। समस्या: जब मैं model.save() करता हूं तो मेरे सर्वर पर वास्तव में क्या भेजा जाता है?कैसे स्लिम php और पेरिस
क्लाइंट-साइड: Backbone.js
var Donut = Backbone.Model.extend({
defaults: {
name: null,
sparkles: false,
creamFilled: false
},
url: function() {
return '/donut';
}
});
var bostonCream = new Donut({
name: 'Bawston Cream',
sparkles: true,
creamFilled: true
});
bostonCreme.save(); // <-- Problem: Not sure what & format this is sending
मुझे लगता है कि इसके बाद के संस्करण मेरी मुख्य समस्या है। मेरी समझ यह है कि रीढ़ की हड्डी डिफ़ॉल्ट रूप से होगी, क्योंकि यह नया है क्योंकि पोस्ट डेटा भेजना है। यह इसे भेजने/डोनट भेजता है, लेकिन मेरे पास सवाल यह है कि यह क्या भेजता है? और किस प्रारूप में? मुझे जो परिणाम चाहिए वो डोनट विशेषताओं को मेरे डीबी में सहेजना है। मैं इस का उपयोग कर jQuery $ .post() की तरह इस सर्वर-साइड कोड एक json पारित कर सकते हैं ...
var myDonut = {"name":"Jelly Filled", "sparkles":false, "creamFilled":true};
$.post('http://localhost/donut', myDonut);
... और यह खुशी से यह लगता है, मेरी डेटाबेस के लिए यह बचाता है। लेकिन वर्तमान सेटअप के साथ मेरा रीढ़ की हड्डी डोनट डेटा भेजने की कोशिश कर रहा है, मुझे पोस्ट 500 आंतरिक सर्वर त्रुटि मिलती है। नीचे मेरे पास कुछ सर्वर-साइड कोड है।
सर्वर साइड: स्लिम पीएचपी डब्ल्यू/पेरिस
class Donut extends Model {}
$app->post('/donut', function() use ($app) { // Slim framework routes my POST...
$donuts = Model::factory('Donut')->create(); // Paris stuff...
$donuts->name = $app->request()->post('name'); // Slim request parameters...
$donuts->sparkles = $app->request()->post('sparkles');
$donuts->creamFilled = $app->request()->post('creamFilled');
$donuts->save(); // Paris... Save name, sparkles, and creamFilled to my DB
});
मैं एक जवाब महसूस कर रही है वहाँ बाहर है, लेकिन हर उदाहरण मैं देखा है पहेली का एक टुकड़ा कमी रह गई है या कोई अन्य और मुझे वह नहीं मिल सकता है "ए-एचए!" पल। मैं अग्रिम धन्यवाद और क्षमा चाहता हूं अगर यह वास्तव में अज्ञानी प्रश्न है। :-P
अनुसरण करे/संपादित करें: 1
आपको त्रुटि संदेश पेस्ट कर सकते हैं?
मुझे वर्तमान स्थिति में एक पोस्ट http://localhost:8888/donut 500 (आंतरिक सर्वर त्रुटि) मिलता है। मैं निम्नलिखित कोड के साथ अधिक जानकारी प्राप्त कर सकते हैं।
bostonCream.save({}, { // REPLACE bostonCream.save();
success: function(model, response) {
console.log('SUCCESS:');
console.log(response);
},
error: function(model, response) {
console.log('FAIL:');
console.log(response);
}
});
अब जब मैं रीढ़ की हड्डी के 500 त्रुटि को बचाने(), मैं अभी भी मिल XMLHttpRequest मेरी असफल प्रतिक्रिया के रूप में चलाने पर भी। XMLHttpRequest से एकमात्र उल्लेखनीय सुराग प्रतिक्रिया है पाठ = SQLSTATE [23000]: ईमानदारी बाधा उल्लंघन: 1048 कॉलम 'नाम' शून्य नहीं हो सकता है।
तो मेरा अनुमान है कि या तो 1) मैं बचत() के साथ कुछ गड़बड़ कर रहा हूं जिसमें यह मेरे गुणों को सही तरीके से कैप्चर नहीं कर रहा है, 2) यह वर्तमान में मेरे गुणों को एक प्रारूप में भेज रहा है जो मेरा सर्वर नहीं है ' मानक $ ऐप-> अनुरोध() -> पोस्ट() स्लिम विधियों के साथ पहचान नहीं है (जब मैं $ _POST के साथ सीधे पहुंचने का प्रयास करता हूं तो बहुत कुछ नहीं लगता है), 3) मेरा सर्वर सही तरीके से सेटअप करने के लिए सेटअप नहीं है भेजा जा रहा डेटा का प्रकार।
एक और बात मैंने देखा है, हालांकि मैं नहीं जानता कि क्या यह सुनिश्चित करने के लिए कि जब मैं
echo $_POST;
जोड़ने यह एक खाली सरणी मेरे लिए रिटर्न है। अभी भी मुझे असफल देता है। अगर मैं ऐसा करता हूं ...
echo json_encode($_POST);
यह मुझे एक सफलता देता है और प्रतिक्रिया एक [] है। वहां कुछ भी नहीं है। स्पष्ट रूप से मेरा पोस्ट डेटा अभी भी भद्दा है।
आप एक genious हैं! इसके लिए प्रश्न + उत्तर के लिए एक प्लस। धन्यवाद! –
हाय ऑरंगवार्प, मैं बैकबोन और स्लिम का उपयोग करके यहां एक ही मुद्दे के साथ संघर्ष कर रहा हूं। मुझे यह बहुत अजीब लगता है कि आपको getBody() का उपयोग करना है, जबकि आपके अनुरोध के आधार पर पोस्ट() या put() का उपयोग करना अधिक उचित है। – Maarten
आप के लिए JSON स्लिम पार्स हो सकता है। आपको अभी भी GetBody() को कॉल करने की आवश्यकता होगी। अनुरोध की पोस्ट() विधि उस सामग्री को सम्मानित नहीं करती है जो ContentType Middleware ने किया था, और केवल फ़ॉर्म डेटा से निपटने के लिए प्रतीत होता है। $ ऐप को तुरंत चालू करने के बाद, यह करें: $ app-> जोड़ें (नया \ स्लिम \ मिडलवेयर \ ContentTypes()); // आने वाले JSON पार्स प्राप्त करें। उसके बाद, GetBody() पार्स किए गए डेटा की एक अच्छी सरणी देता है। –