كيفية بناء متعدد النطاق التطبيق Laravel

لقد قمت مؤخرًا ببناء نظام SaaS مخصص للتجارة الإلكترونية في مكانه المخصص B2B. تم إنشاء التطبيق باستخدام إطار Laravel ويسمح للمستخدمين بإنشاء متاجرهم الخاصة تحت نطاق التطبيق الفرعي (ما يسمى التطبيق متعدد الاستئجار).

على الرغم من أنني لن أشارك أي روابط أو معلومات حول المشروع الحقيقي ، إلا أنني سأشارك أفكاري وتجربتي والنصائح والحيل المفيدة التي تعلمتها أثناء تطوير هذا التطبيق.

لغرض هذه المقالة ، قمت بإنشاء تطبيق صغير جدًا يحتوي على ميزات أساسية فقط للتطبيق متعدد المجالات. المشروع مفتوح المصدر ومتاح على جيثب.

آمل أن تكون هذه المقالة مفيدة لك وأن تساعدك على فهم كيفية إنشاء مثل هذا النوع من التطبيقات بشكل أفضل.

لإعطائك فكرة أفضل عما سنقوم ببنائه ، قمت بتضمين بعض لقطات الشاشة لتطبيقنا التجريبي.

صفحة تسجيل التطبيقتطبيق لوحة القيادة

المتطلبات الأساسية

لنفترض ما يلي:

- نطاقنا الرئيسي هو example.com ، إنه ليس تطبيقنا بعد ، إنه صفحة أولى في خدمتنا ، تحتوي على معلومات التسعير ، مدونة ، صفحة اتصال ، إلخ ؛

- app.example.com - هو نقطة دخول تطبيقنا ، يمكن للمستخدمين الاشتراك هنا وفتح متجر تحت نطاق فرعي مخصص.

- admin.example.com - هي لوحة تحكم التطبيق حيث يمكننا رؤية المقاييس الرئيسية لتطبيقنا ، وإدارة الاشتراكات ، وما إلى ذلك. يجب ألا يتمتع أي شخص باستثناءنا بإمكانية الوصول إلى هذه المنطقة ؛

- {shop} .example.com - واجهة المستخدم للمستخدم ، على سبيل المثال acme.example.com.

دعنا أيضًا نصف الكيانات الرئيسية لتطبيقنا:

المستخدم - هو كيان يمثل شخصًا حقيقيًا (على سبيل المثال من يمكنه تسجيل الدخول أو التسجيل) ؛

قد يكون المستخدم عميلًا في بعض المتاجر والمدير (أو المالك) في متاجر أخرى ؛

المدير - هو كيان لديه حق الوصول إلى لوحة إدارة المتجر

إذا كان Manager هو صاحب المتجر - فيمكنه أيضًا الوصول إلى المساحات الإضافية من لوحة إدارة المتجر: مثل الفوترة وإدارة الموظفين وما إلى ذلك.

عميل - كيان يمثل العميل لهذا المتجر. يرجى ملاحظة: لن يربط العميل دائمًا بالمستخدم ، حيث يُفترض أن مديري المتاجر يمكنهم إنشاء عملاء وتعيين أوامر لهم يدويًا.

تسوق - كيان يمثل متجرًا على الإنترنت لشركة معينة. نطاق المتجر فريد عبر منصتنا.

تصميم قواعد البيانات والنماذج

قد تبدو بنية قاعدة البيانات لدينا كما يلي:

هيكل قاعدة البيانات

بالمناسبة ، لقد استخدمت QuickDatabaseDiagrams لإنشاء نموذج أولي لقاعدة البيانات.

يرجى ملاحظة: من المحتمل أن تضيف في تطبيقك بعض الجداول الإضافية ، مثل المنتجات ، الطلبات ، الفواتير ، إلخ.

طرق التطبيق

يمكننا تقسيم جميع طرقنا إلى 4 مجموعات محددة:

app.example.com - طرق التطبيق العامة ، حيث يمكن للمستخدم التسجيل وفتح متجر جديد (كما هو موضح في لقطات الشاشة أعلاه) ؛

admin.example.com - طرق إدارة التطبيقات ، حيث يمكن لـ super amin عرض مقاييس التطبيق ، وإدارة المستخدمين ، وما إلى ذلك. يرجى ملاحظة: أنصحك باستخدام نطاق فرعي آخر في تطبيق حقيقي وإعداد حماية إضافية لأسباب أمنية.

قد يبدو على النحو التالي:

عرض المشرف السوبر

{shop} .example.com - واجهة متجر المستخدم. في تطبيقنا ، إنها مجرد صفحة ثابتة بسيطة كما تظهر في لقطة الشاشة أدناه:

تخزين الواجهة الأمامية

{shop} .example.com / admin - لوحة إدارة المتجر ، يمكن فقط لمالكي ومديري المتاجر الوصول إلى هذه المنطقة.

مسؤول المتجر

الوسيطة

سنستخدم برامج وسيطة مخصصة في مشروعنا. على سبيل المثال ، سنحتاج إلى التحقق من نطاق متجر ، والتحقق مما إذا كان المستخدم هو مدير متجر أو ما إذا كان المستخدم مسؤول تطبيق وما إلى ذلك.

CheckShopDomain

هو مدير متجر

هو التطبيق المسؤول

معالجة طرق النطاقات الفرعية

قد يبدو العمل مع طرق النطاق الفرعي مشتتًا قليلاً في البداية ، حيث استخدمنا نطاق wildcard في طريقنا ، وسنحتاج إلى تمرير النطاق الفرعي إلى جميع مساراتنا ، على سبيل المثال:

الطريق ( 'shop.home' [ 'فرعي' => طلب () -> الطريق ( 'فرعي')])

أعتقد أنك توافق معي على أنها ليست جيدة

ماذا يمكننا أن نفعل هنا؟

لذلك ، يمكننا إنشاء وظيفة مساعدة صغيرة تضيف سمة النطاق الفرعي إلى المسار بالنسبة لنا ، وقد تبدو كما يلي:

مشاركة الجلسة بين المجالات

أحد الأشياء التي قد تلاحظها هو أن الجلسة لم يتم حفظها عند تسجيل دخول المستخدم في متجر واحد والانتقال إلى متجر آخر. لحل هذه المشكلة ، سنحتاج إلى إضافة متغير SESSION_DOMAIN إلى ملف .env الخاص بنا ، على سبيل المثال:

SESSION_DOMAIN = '. example.com "

هذا كل شيء ، سيتم الآن مشاركة جلسة المستخدم عبر جميع المتاجر / النطاقات الفرعية في تطبيقنا.

توفير المشرف السوبر

لن أخوض في التفاصيل في هذه المقالة ، كما كتبت مقالة قصيرة منذ فترة حيث شرحت كيفية إنشاء مستخدم مسؤول في تطبيق Laravel.

ما لم يتم تضمينه في هذا المشروع

نظرًا لأن هذا ليس مشروعًا كامل الميزات ، لم نقم بتضمين الكثير من الميزات التي قد يتوفر بها تطبيق في العالم الحقيقي ، مثل:

  • إدارة الفواتير / الاشتراك
  • مقاييس التطبيق
  • إدارة متجر
  • قوة HTTPS
  • تعيين مجال مخصص
  • التحقق من البريد الإلكتروني وتفعيله ؛

هذا كل شيء ، شكرا لك على القراءة!

كود مصدر التطبيق متاح على جيثب: https://github.com/DigitalWheat/Multi-Domain-Laravel

شكرا لك على وقتك ، وآمل أن تستمتع هذا المقال! لا تتردد في تبادل لاطلاق النار لي سقسقة إذا كان لديك أي أسئلة أو تعليقات!

نشرت أصلا في موقع الويب الخاص بي - maxkostinevich.com