2012-10-28 11 views
7

डिफ़ॉल्ट यसोड मचान को देखते हुए, अपलोड की गई फ़ाइल को static निर्देशिका में स्थानांतरित करके लागू फ़ाइल अपलोड के साथ, मैं स्थिर निर्देशिका में फ़ाइल से कैसे लिंक करूं? सामान्य स्थैतिक फ़ाइलों के लिए, staticFiles विभाजन एक पहचानकर्ता उत्पन्न करेगा जिसे मैं संदर्भित कर सकता हूं, लेकिन उपयोगकर्ता द्वारा अपलोड की गई फ़ाइलों के लिए स्पष्ट रूप से मैं इन पहचानकर्ताओं को हार्डकोड नहीं कर सकता। मैं मैन्युअल रूप से #{} स्प्लिस का उपयोग करके ऐसा कर सकता हूं, लेकिन मुझे उम्मीद थी कि कुछ और प्रकार टाइप हो सकते हैं, यहां तक ​​कि केवल चेक करने योग्य घटक यह है कि मैंने static/ उपसर्ग सही ढंग से उपयोग किया था।यसोड में स्थैतिक फ़ाइल से लिंक करें जिसमें हैस्केल पहचानकर्ता

उत्तर

8

staticFiles टाइप Route Static के साथ पहचानकर्ताओं का एक समूह उत्पन्न करता है। दुर्भाग्य से, हेडॉक जुड़े प्रकार परिवारों के बारे में जानकारी प्रदर्शित नहीं करता है, ताकि आप डॉक्स में निर्माता नहीं देख सकते हैं, लेकिन केवल निर्माता उपलब्ध StaticRoute है:

https://github.com/yesodweb/yesod/blob/master/yesod-static/Yesod/Static.hs#L142 

दो क्षेत्रों पथ की जानकारी कर रहे हैं और क्वेरी स्ट्रिंग पैरामीटर। तो /static/foo/bar?baz=bin के लिए एक लिंक बनाने के लिए, आप इस्तेमाल कर सकते हैं:

StaticRoute ["foo", "bar"] [("baz", "bin")] 

आम तौर पर एक क्वेरी स्ट्रिंग पैरामीटर बनाने के लिए आवश्यक नहीं है, लेकिन staticFiles कैश-पर्दाफाश प्रयोजनों के लिए एक हैश मान को सम्मिलित करने के लिए उपयोग करेंगे।

+0

महत्वपूर्ण परिशिष्ट: चूंकि स्टेटिक एक सबसाइट है, वास्तव में आपके ऐप को लिंक एम्बेड करने के लिए, आपको स्टेटिक रूट के साथ स्टेटिक रूट (या जो भी सबसाइट का आपका एम्बेडिंग कन्स्ट्रक्टर है) को लपेटने की आवश्यकता होगी। लेकिन अन्यथा, यह बहुत अच्छा काम करता है। –

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