استخدام سياق الطلب في قوالب Go
في قوالب Go، قد تواجه موقفًا حيث تحتاج إلى الوصول إلى المعلومات من طلب التشغيل، مثل تحديد ما إذا كان المستخدم الحالي مسؤولاً. ومع ذلك، تفتقر القوالب إلى الوعي المتأصل بسياق الطلب.
الحل: خطوط الأنابيب
أحد الأساليب الشائعة هو استخدام خطوط الأنابيب لتمرير البيانات الضرورية من المعالج إلى القالب . يتضمن ذلك إنشاء متغير مسار يحتوي على معلومات السياق ذات الصلة ثم الوصول إليه داخل القالب. على سبيل المثال:
type TemplateData struct {
IsUserAdmin bool
}
func handler(w http.ResponseWriter, r *http.Request) {
isUserAdmin := isAdmin(r)
data := TemplateData{IsUserAdmin: isUserAdmin}
t.Execute(w, data)
}
ضمن القالب:
{{if .IsUserAdmin}} Go to the big red nuclear button {{end}}
سياق التضمين
هناك خيار آخر وهو تضمين سياق الطلب في بنية بيانات القالب المخصص. يتيح لك هذا الوصول إلى كل من بيانات القالب والسياق في وقت واحد:
type TemplateData struct {
Data interface{}
Context *http.Request
}
ضمن القالب:
{{if .Context.IsAdmin}} Go to the big red nuclear button {{end}}
طريقة التحويل
على الرغم من أنه يمكن استخدام طريقة Funcs لتحديد وظائف مخصصة، إلا أنه لا يوصى بها للتعامل مع المنطق المعقد مثل تحديد أذونات المستخدم. من الأفضل الاحتفاظ بمثل هذه المهام داخل المعالجات أو وحدات التحكم.
أفضل الممارسات
بشكل عام، يعتبر من أفضل الممارسات قصر القوالب على التعامل مع منطق العرض وتجنب تقديم منطق الأعمال أو طلب تبعيات السياق. ومع ذلك، في بعض الحالات، قد يكون من الضروري الوصول إلى معلومات طلب محددة، ومن هنا الطرق الموضحة أعلاه.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3