2012-06-13 12 views
11

मैं सिम्फनी 2 के साथ एक छोटा ई-शॉप एप्लिकेशन लिख रहा हूं और मुझे सत्र में उपयोगकर्ता के शॉपिंग कार्ट को स्टोर करने के लिए कुछ तरीका चाहिए। मुझे लगता है कि डेटाबेस का उपयोग करना एक अच्छा विचार नहीं है।सत्रों में स्टोर ऑब्जेक्ट्स सिम्फनी 2

आवेदन उत्पाद, श्रेणी, ShoppingCart जहां उत्पाद और श्रेणी डेटाबेस और उन तक बना रहे हैं जैसे संस्थाओं का उपयोग करेगा उनके ShoppingCart में उत्पादों को चुनने की जाएगी।

मुझे मूल सत्रस्थान कक्षा मिली है जो किसी इकाई को सत्र में सहेजना है। लेकिन आवेदन में कार्यान्वयन की कोई लिखित प्रक्रिया नहीं है।

क्या मैं इसे नियंत्रक या अलग वर्ग शॉपिंगकार्ट में उपयोग करता हूं? क्या आप मुझे NativeSessionStorage उपयोग का संक्षिप्त उदाहरण दे सकते हैं?

संपादित करें: सवाल सही ढंग से निर्धारित नहीं किया गया था:

लक्ष्य एक कुकी में सभी उत्पाद id को बचाने के लिए नहीं है। लक्ष्य सर्वर-साइड पर एप्लिकेशन मेमोरी में टोकरी (उत्पादों से भरा) के लिए केवल एक संदर्भ को सहेजना है और उपयोगकर्ता को उचित टोकरी असाइन करना है। क्या PHP में ऐसा करना भी संभव है?

EDIT2:

एक सेवा का उपयोग करने के लिए एक बेहतर समाधान है?

+0

यह आम तौर पर एक बुरा है विचार क्योंकि भंडारण बहुत सीमित है और आपके पास यह जानने का कोई तरीका नहीं है कि यह संग्रहित करना सफल था या नहीं। मैं इसे एक अस्थायी तालिका या डेटाबेस में सहेज दूंगा, शायद रेडिस या मोंगोडब जैसे कुछ का उपयोग कर और सत्र में शॉपिंग कार्ट में बस एक कुंजी स्टोर करें। – Sgoettschkes

उत्तर

20

पता नहीं है कि यह तरीका आपके डेटा को अस्थायी रूप से संग्रहीत करने का बेहतर तरीका है या नहीं। , सत्र स्वचालित रूप से प्रारंभ

use Symfony\Component\HttpFoundation\Session; 

फिर जब आप एक सेट करना चाहते हैं:

$session = $this->get("session");

अपने नियंत्रक में 'उपयोग' मत भूलना: आप एक सत्र वस्तु का दृष्टांत को यह उपयोग कर सकते हैं चर की तरह:

$session->set("product name","computer");

यह Session वर्ग, आसान के उपयोग पर आधारित है समझने के लिए। आमतौर पर परिभाषाएं:

get(string $name, mixed $default = null) 

Returns an attribute. 

set(string $name, mixed $value) 

Sets an attribute. 

has(string $name) 

Checks if an attribute is defined. 

इसके अलावा, अन्य तरीकों से करने के लिए एक बार देख ले अपने डाटा स्टोर करने की: Multiple SessionStorage

+0

यह केवल सत्र सेवा का उपयोग करने के तरीके को बताता है। जैसा कि प्रश्न में निर्दिष्ट किया गया है कि इकाई के उदाहरणों को सत्र में मुन मुन दास और इवान क्वसनिका द्वारा दिए गए उत्तरों की आवश्यकता होती है, जिससे संग्रहीत इकाइयों को क्रमबद्ध किया जाता है, उन्हें भी उपयोग करने की आवश्यकता होती है। – Adambean

14

आप अपने इकाई Serializable बनाने के लिए और इकाई वस्तु को क्रमानुसार और सत्र के लिए बचा सकते हैं और फिर दूसरे पेज में पुनः प्राप्त unserialize() का उपयोग कर। एक चेतावनी है, डीबी Doctrine2 में मौजूद एक इकाई के लिए पुनर्प्राप्त/unserialized इकाई को अलग के रूप में चिह्नित करेगा। इस मामले में आपको $em->merge($entity); पर कॉल करना होगा।

5

आप संपूर्ण ऑब्जेक्ट को सिम्फनी के साथ सत्र में सहेज सकते हैं। बस (एक नियंत्रक में) का उपयोग करें:

$this->get('session')->set('session_name', $object); 

सावधान: वस्तु serializable की जरूरत है। अन्यथा, start_session() फ़ंक्शन पर सत्र लोड करते समय PHP क्रैश हो जाता है।

बस इस तरह, serialize() और unserialize() विधि जोड़कर \ Serializable इंटरफ़ेस को लागू:

public function serialize() 
    { 
    return serialize(
     [ 
     $this->property1, 
     $this->property2, 
     ] 
    ); 
    } 

    public function unserialize($serialized) 
    { 
    $data = unserialize($serialized); 
    list(
     $this->property1, 
     $this->property2, 
    ) = $data; 
    } 

स्रोत:http://blog.ikvasnica.com/entry/storing-objects-into-a-session-in-symfony (इस विषय पर मेरी ब्लॉग पोस्ट)