logologo
البدء
الدليل
التطوير
الإضافات
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
البدء
الدليل
التطوير
الإضافات
API
logologo

بدء سريع

نظرة عامة على تطوير الإضافات
كتابة الإضافة الأولى
هيكل دليل المشروع

تطوير الواجهة الخلفية

نظرة عامة
Plugin
جداول بيانات Collections
عمليات Database
إدارة مصادر بيانات DataSourceManager
إدارة موارد ResourceManager
التحكم في أذونات ACL
Middleware
Cache
Event
سياق طلب Context
نص ترقية Migration
Logger
Telemetry
I18n (تدويل)
Command (سطر الأوامر)
إدارة المهام المجدولة CronJobManager
Test

تطوير الواجهة الأمامية

نظرة عامة
Plugin
Context (السياق)
Router
التحكم في أذونات ACL
إدارة مصادر بيانات DataSourceManager
Resource
Request
Styles & Themes (الأنماط والمظاهر)
Logger
I18n (تدويل)
Test

أخرى

دليل ترقية الإضافات
قائمة اللغات
إدارة التبعيات
البناء
Previous PageEvent
Next Pageنص ترقية Migration
إشعار الترجمة بالذكاء الاصطناعي

تمت ترجمة هذه الوثائق تلقائيًا بواسطة الذكاء الاصطناعي.

#السياق (Context)

في NocoBase، يُنشئ كل طلب كائن ctx، وهو نسخة من السياق (Context). يغلف السياق معلومات الطلب والاستجابة، ويوفر في الوقت نفسه وظائف خاصة بـ NocoBase، مثل الوصول إلى قاعدة البيانات، وعمليات التخزين المؤقت (cache)، وإدارة الأذونات، والتدويل (internationalization)، وتسجيل السجلات (logging)، وغيرها.

تعتمد Application في NocoBase على Koa، لذا فإن ctx هو في الأساس Koa Context. لكن NocoBase وسّعت هذا السياق بواجهات برمجة تطبيقات (APIs) غنية، مما يتيح للمطورين معالجة منطق الأعمال بسهولة في Middleware و Actions. يمتلك كل طلب كائن ctx مستقلًا، مما يضمن عزل البيانات وأمانها بين الطلبات.

#ctx.action

يوفر ctx.action الوصول إلى الـ Action الذي يتم تنفيذه للطلب الحالي. يتضمن:

  • ctx.action.params
  • ctx.action.actionName
  • ctx.action.resourceName
resourceManager.use(async (ctx) => {
  console.log(ctx.action.actionName); // يعرض اسم الـ Action الحالي
  ctx.body = `Action: ${ctx.action.actionName}`;
});

#ctx.i18n و ctx.t()

دعم التدويل (i18n).

  • يوفر ctx.i18n معلومات اللغة المحلية.
  • يُستخدم ctx.t() لترجمة السلاسل النصية بناءً على اللغة.
resourceManager.use(async (ctx) => {
  const msg = ctx.t('Hello World'); // يُرجع الترجمة بناءً على لغة الطلب
  ctx.body = msg;
});

#ctx.db

يوفر ctx.db واجهة للوصول إلى قاعدة البيانات، مما يتيح لك التعامل مباشرة مع النماذج (models) وتنفيذ الاستعلامات.

resourceManager.use(async (ctx) => {
  const users = await ctx.db.getRepository('users').find();
  ctx.body = users;
});

#ctx.cache

يوفر ctx.cache عمليات التخزين المؤقت (cache)، ويدعم القراءة والكتابة من وإلى الذاكرة المؤقتة، ويُستخدم عادةً لتسريع الوصول إلى البيانات أو حفظ الحالات المؤقتة.

resourceManager.use(async (ctx) => {
  await ctx.cache.set('key', 'value', 60); // تخزين مؤقت لمدة 60 ثانية
  const val = await ctx.cache.get('key');
  ctx.body = val;
});

#ctx.app

ctx.app هو نسخة تطبيق NocoBase، ويسمح بالوصول إلى الإعدادات العامة، والإضافات (Plugins)، والخدمات.

resourceManager.use(async (ctx) => {
  console.log(ctx.app);
  ctx.body = 'Check console for app';
});

#ctx.auth.user

يسترد ctx.auth.user معلومات المستخدم الحالي المصادق عليه، وهو مناسب للاستخدام في التحقق من الأذونات أو منطق الأعمال.

resourceManager.use(async (ctx) => {
  if (!ctx.auth.user) {
    ctx.throw(401, 'Unauthorized');
  }
  ctx.body = `Hello ${ctx.auth.user.username}`;
});

#ctx.state.currentRoles

يُستخدم ctx.state لمشاركة البيانات في سلسلة الـ middleware.

resourceManager.use(async (ctx) => {
  ctx.body = `Current User: ${ctx.state.currentRoles.join(',')}`;
});

#ctx.logger

يوفر ctx.logger إمكانيات تسجيل السجلات (logging)، ويدعم إخراج السجلات على مستويات متعددة.

resourceManager.use(async (ctx) => {
  ctx.logger.info('Processing request for:', ctx.path);
  ctx.body = 'Logged successfully';
});

#ctx.permission و ctx.can()

يُستخدم ctx.permission لإدارة الأذونات، بينما يُستخدم ctx.can() للتحقق مما إذا كان المستخدم الحالي يمتلك صلاحية تنفيذ عملية معينة.

resourceManager.use(async (ctx) => {
  const canEdit = await ctx.can('edit', 'posts');
  if (!canEdit) {
    ctx.throw(403, 'Forbidden');
  }
  ctx.body = 'You have permission to edit posts';
});

#ملخص

  • كل طلب يقابله كائن ctx مستقل.
  • ctx هو امتداد لـ Koa Context، يدمج وظائف NocoBase.
  • تشمل الخصائص الشائعة: ctx.db، ctx.cache، ctx.auth، ctx.state، ctx.logger، ctx.can()، ctx.t()، وغيرها.
  • يتيح استخدام ctx في Middleware و Actions التعامل بسهولة مع الطلبات، والاستجابات، والأذونات، والسجلات، وقاعدة البيانات.