back

Knowledge Centre

إنشاء خدمات مخصصة في Drupal 8: دليل شامل

| 20.11.2018

إنشاء خدمات مخصصة في Drupal 8: دليل شامل

الحقن المعتمد هو نمط تصميم أساسي في Drupal 8 يعزز إعادة استخدام الكود وقابليته للصيانة. من خلال فصل الوظائف، يمكننا كتابة كود أكثر كفاءة يسهل اختباره وصيانته. دعونا نستكشف كيفية تنفيذ الخدمات المخصصة باستخدام الحقن المعتمد.

الخدمات الأساسية في Drupal 8

تم تعريف الخدمات الأساسية لـ Drupal في ملف `core.services.yml`. فيما يلي مثال على كيفية إعلان خدمة أساسية:

services:
 path.current:
   class: Drupal\Core\Path\CurrentPathStack
   arguments: ['@request_stack']

يتضمن هذا الإعلان ثلاثة عناصر رئيسية:
- اسم الخدمة (`path.current`)
- الفئة المنفذة
- الاعتمادات المطلوبة (تمرير كمعاملات)

لاستخدام هذه الخدمة في سياق ثابت:

// ملاحظة: يجب تجنب استدعاءات الخدمة الثابتة عندما يكون ذلك ممكنًا
$currentPath = \Drupal::service('path.current');
$path = $currentPath->getPath();

إنشاء خدمة مخصصة

دعونا ننشئ خدمة مخصصة في وحدة تسمى "mymodule". أولاً، قم بإنشاء ملف يُسمى `mymodule.services.yml` في دليل الوحدة الجذري:

services:
 mymodule.tools:
   class: Drupal\mymodule\MyTools
   arguments: ['@database']

الآن، دعونا ننفذ فئة الخدمة (`MyTools.php`) في الدليل `src`:

namespace Drupal\mymodule;
use Drupal\Core\Database\Connection;
/**
* يوفر وظائف مساعدة للعمل مع العقد.
*/
class MyTools {
 /**
  * اتصال قاعدة البيانات.
  *
  * @var \Drupal\Core\Database\Connection
  */
 protected $database;
 /**
  * ينشئ خدمة MyTools جديدة.
  *
  * @param \Drupal\Core\Database\Connection $connection
  *   اتصال قاعدة البيانات.
  */
 public function __construct(Connection $connection) {
   $this->database = $connection;
 }
 /**
  * يسترجع معرف المؤلف للعقدة.
  *
  * @param int $nid
  *   معرف العقدة.
  *
  * @return int|null
  *   معرف المستخدم لمؤلف العقدة، أو null إذا لم يتم العثور عليه.
  */
 public function showAuthor($nid) {
   $query = $this->database->select('node_field_data', 'nfd')
     ->fields('nfd', ['uid'])
     ->condition('nfd.nid', $nid);
   
   $result = $query->execute()->fetchAll();
   
   return !empty($result) ? $result[0]->uid : NULL;
 }
}

الوصول إلى الخدمات المخصصة

هناك طريقتين رئيسيتين للوصول إلى الخدمات:

1. حاوية الخدمة الثابتة (غير موصى بها)

// تجنب هذا النهج في الكود الذي يعتمد على التوجيه الكائني
$toolService = \Drupal::service('mymodule.tools');
$authorId = $toolService->showAuthor(15);

 2. الحقن المعتمد (موصى به)

/**
* يوضح الحقن المعتمد بشكل صحيح.
*/
class MyController extends ControllerBase {
 /**
  * خدمة الأدوات المخصصة.
  *
  * @var \Drupal\mymodule\MyTools
  */
 protected $myTools;
 /**
  * ينشئ MyController جديدة.
  *
  * @param \Drupal\mymodule\MyTools $my_tools
  *   خدمة الأدوات المخصصة.
  */
 public function __construct(MyTools $my_tools) {
   $this->myTools = $my_tools;
 }
 /**
  * {@inheritdoc}
  */
 public static function create(ContainerInterface $container) {
   return new static(
     $container->get('mymodule.tools')
   );
 }
 /**
  * مثال على الطريقة باستخدام الخدمة.
  */
 public function exampleMethod($nid) {
   $authorId = $this->myTools->showAuthor($nid);
   // معالجة $authorId كما هو مطلوب
 }
}

أفضل الممارسات

1. استخدم دائمًا الحقن المعتمد في الفئات بدلاً من استدعاءات الخدمة الثابتة
2. قم بتسمية الخدمات بشكل متسق، بدءًا باسم الوحدة الخاصة بك
3. قم بتوثيق فئات الخدمة والأساليب بشكل كامل
4. قم بتضمين تلميحات النوع الصحيحة وإعلانات نوع العودة
5. التعامل مع حالات الخطأ وإرجاع القيم الافتراضية المناسبة

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

دروبال 8
  • المعرفة
    مركز المعرفة
    داخل عقل الذكاء الصناعي
  • المعرفة
    مركز المعرفة
    تنعيم LLaMA لإعادة إنشاء أسلوب إمينيسكو الأدبي
  • المعرفة
    مركز المعرفة
    تبدأ عهدًا جديدًا: إطلاق نظام إدارة المحتوى دروبال 1.0