Advertisement
  1. Code
  2. PHP

أساسيات إنشاء مجموعات Laravel

Scroll to top
Read Time: 11 min

Arabic (العربية/عربي) translation by miahood (you can also view the original English article)

في إطار لارافل PHP يوفر نظام حزم للسماح للمطورين لإعادة توزيع حزم مفيدة للقانون، أو لتنظيم التطبيقات إلى عدة "حزم" من التطبيقات الصغيرة.

في هذا البرنامج التعليمي ، سوف نتعلم خصوصيات وعموميات إنشاء وتوزيع حزم من الصفر.

تتمتع حزمة Laravel بالوصول إلى جميع الميزات التي يوفرها إطار العمل لتطبيقه المضيف ، بما في ذلك التوجيه والهجرات والاختبارات وطرق العرض والعديد من الميزات المفيدة الأخرى.

إليك سرًا صغيرًا ، بيننا: مجلد التطبيق لحزمة المصدر Laravel هو أيضًا حزمة ، والتي يشير إليها Laravel باسم DEFAULT_BUNDLE .


متى يجب إنشاء حزمة؟

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

هل يمكن أن يكون هذا الرمز مفيدًا للآخرين؟

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

ثانيًا ، أفكر في الشفرة وأقرر ما إذا كان ذلك قد يكون مفيدًا لمستخدمي الأطر الأخرى أو الأشخاص الذين لا يستخدمون إطارًا على الإطلاق. إذا لم يكن الكود مرتبطًا بإطار Laravel ولا يحتاج إلى الاستفادة من فصول Laravel الأساسية ، عندئذٍ يمكنني إنشاء حزمة Composer بدلاً من ذلك. أصبحت حزم الملحنين معيارًا على نطاق واسع لشفرة المشاركة التي لا تقتصر على إطار أو مشروع واحد.

لمزيد من المعلومات حول الملحن ، ارجع إلى الروابط التالية:

  • الوثائق الرسمية
  • إدارة حزمة سهلة مع الملحن

إذا كان الرمز مفيدًا للآخرين ، ويعتمد على إطار Laravel ، فحينئذٍ لديك سبب وجيه لإنشاء حزمة جديدة.

هل علي كتابة هذا الرمز مرة أخرى؟

DRY هو اسم اللعبة.

إذا كان الرمز يوفر وظائف تكتبها بشكل متكرر ، فمن المنطقي إنشاء حزمة. DRY (لا تكرر نفسك!) هو اسم اللعبة.

هل يمكن اعتبار هذا الرمز تطبيقًا مستقلًا؟

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

مثال آخر هو قسم إداري ، أو "نهاية خلفية" لموقعك على الويب. يمكن اعتبار هذا القسم بسهولة مكون منفصل عن التطبيق الرئيسي ، ويمكن بدلاً من ذلك تنظيمه في حزمة واحدة أو أكثر.

هل يلائم هذا القانون فئة واحدة؟

إذا كانت هذه هي الحالة ، فقد تفكر في كتابة "مكتبة" بدلاً من ذلك. المكتبة هي فئة واحدة تحتوي على كود قابل لإعادة الاستخدام. يمكن إضافته إلى مشروع Laravel بسهولة عن طريق إسقاط الفصل في دليل التطبيق / المكتبات / ، والذي يتم تحميله تلقائيًا افتراضيًا.


إنشاء حزمة

دعونا إنشاء مكون بسيط يتفاعل مع خدمة Gravatar لتقديم طريقة بسيطة لتوليد الصور الرمزية من مختلف الأحجام داخل التطبيق الرئيسي لدينا. سنضيف أيضًا الوظائف اللازمة لإدخال عنوان بريد إلكتروني وحجم أفاتار ، ونقوم بمعاينة Gravatar المقترنة على الصفحة.

دعونا نبدأ بإنشاء دليل جديد في دليل / حزم مشروعنا. سنقوم باستدعاء الدليل و gravvy لدينا. لا جفا ... gravvy.

دعونا نضيف الجاذبية إلى صفيف الحزم داخل التطبيق / bundles.php حتى نتمكن من اختباره بينما نمضي قدما. سنضيف خيار 'auto' => true إلى المصفوفة بحيث يتم بدء تشغيل الحزمة تلقائيًا ، وستكون أي تعيينات autoloader نقوم بإنشائها متاحة لكل Laravel.

1
return array(
2
    'docs' => array('handles' => 'docs'),
3
    'gravvy' => array(
4
        'auto' => true
5
    )
6
);

أولاً ، سنحتاج إلى إنشاء مكتبة صغيرة تسترجع صورة العضو ، باستخدام عنوان بريد إلكتروني. قم بإنشاء ملف جديد داخل جذر الحزمة ، المسمى gravvy.php . دعونا نخلق فئة ، تدعىGravvy مع طريقة ثابتة ، make () ، لتكرار نظام التسمية الذي تستخدمه مكتبات Laravel الخاصة.

و جعل () وطريقة يقبل معلمتين: عنوان البريد الإلكتروني وعدد صحيح لتمثيل حجم الصورة الرمزية لاسترداد.

1
<?php
2
3
/**

4
 * Class to create Gravatar image elements.

5
 *

6
 * @author  You <you@you.com>

7
 */
8
class Gravvy
9
{
10
    /**

11
     * Create a new image element from an email address.

12
     * @param  string  $email The email address.

13
     * @param  integer $size  The avatar size.

14
     * @return string The source for an image element.

15
     */
16
    public static function make($email, $size = 32)
17
    {
18
        // convert our email into an md5 hash

19
        $email = md5($email);
20
21
        // return the image element

22
        return '<img src="http://www.gravatar.com/avatar/'
23
                    .$email.'?s='.$size;
24
    }
25
}

لا يتم تحميل أدلة جذر الحزمة تلقائيًا ، لذلك دعونا نكتب تخطيطًا حتى يعرف Laravel مكان العثور على فئة "Gravvy" عندما يحتاج إليها.

عند بدء تشغيل حزمة ، يبحث Laravel عن ملف ، اسمه start.php ، ويقوم بتنفيذها. لذا ، دعنا ننشئ واحدة ضمن دليل الحزمة الجديدة لدينا حتى نتمكن من إجراء تعيينات التحميل التلقائي.

1
<?php
2
3
// /bundles/gravvy/start.php

4
5
Autoload::map(array(
6
    'Gravvy' => path('bundles').'/gravvy/gravvy.php'
7
));

الآن سيعرف Laravel مكان العثور على تعريف لفئة Gravvy ، وسيقوم بتحميل المصدر عندما يحتاج إليه أولاً. فعال جدا!

على الطريق () طريقة هي وظيفة المساعد، والتي ترجع المسار المطلق إلى مجلدات مفيدة يستخدمها لارافل. في هذه الحالة ، نستخدمها لاسترداد المسار المطلق إلى دليل الحزم.

والآن بعد أن حصلنا على فئة Gravvy ، يمكننا محاولة استخدامها من خلال جهاز تحكم لمعرفة ما إذا كنا نحصل على الناتج المتوقع ، ولكن أعتقد أنه سيكون من الأنسب كتابة اختبار وحدة.

تمامًا مثل التطبيق المضيف ، تتوفر اختبارات الوحدة من داخل الحزمة. لنقم بإنشاء مجلد اختبارات داخل الحزمة ، وإضافة ملف جديد يسمىgeneral.test.php .

1
<?php
2
3
class TestGeneral extends PHPUnit_Framework_TestCase {
4
5
    /**

6
     * Test that an avatars output appears as expected.

7
     *

8
     * @return void

9
     */
10
    public function testAvatarImageIsGenerated()
11
    {
12
        // start the gravvy bundle

13
        Bundle::start('gravvy');
14
15
        // check that the output matches the expected

16
        $this->assertEquals(Gravvy::make('thepunkfan@gmail.com'),
17
            '<img src="http://www.gravatar.com/avatar/fac3a58aaa455adbcb3f684ccff663b8?s=32" />');
18
    }
19
20
    /**

21
     * Test that an avatars output appears as expected when

22
     * specifying a custom avatar size.

23
     *

24
     * @return void

25
     */
26
    public function testAvatarImageIsGeneratedWithSize()
27
    {
28
        // start the gravvy bundle

29
        Bundle::start('gravvy');
30
31
        // check that the output matches the expected

32
        $this->assertEquals(Gravvy::make('thepunkfan@gmail.com', 64),
33
            '<img src="http://www.gravatar.com/avatar/fac3a58aaa455adbcb3f684ccff663b8?s=64" />');
34
    }
35
36
}

أعلاه ، قمنا بكتابة اختبارين PHPUnit: أحدهما لاختبار إخراج توليد صورة شخصية باستخدام بريد إلكتروني ، والآخر يحدد أيضًا حجم أفاتار بالبكسل. ستلاحظ أن نطلق على Bundle :: start ('gravvy') لبدء الحزمة يدويًا. ويرجع ذلك إلى أن Laravel لا يقوم بتحميل تلقائي للحزم من خلال واجهة سطر الأوامر في الوقت الحالي.

بصفتي عضوًا أساسيًا في الفريق ، أود الإشارة إلى أننا نعتزم حل هذه المشكلة في إصدار مستقبلي!

دعونا نستخدم Artisan لتشغيل اختبارات PHPUnit الخاصة بنا عن طريق كتابة أمرالاختبار واستخدام اسم الحزمة ، gravvy ، كمعلمة.

1
php artisan test gravvy
PHPUnit ResultPHPUnit ResultPHPUnit Result

عظيم نجحت اختباراتنا في المحاولة الأولى ، ونمت لدينا الأنا - القليل فقط!

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

للبدء ، دعنا ننشئ وحدة تحكم "معاينة" جديدة لحزمتنا. سنحتاج إلى إنشاء دليل وحدات التحكم داخل الحزمة ، وفي داخلها ، سنقوم بإضافة ملف جديد: preview.php .

1
<?php
2
3
class Gravvy_Preview_Controller extends Controller
4
{
5
    /**

6
     * Show the preview avatar form.

7
     */
8
    public function action_form()
9
    {
10
        // load the form view

11
        return View::make('gravvy::form');
12
    }
13
14
    /**

15
     * Show the resulting avatar.

16
     */
17
    public function action_preview()
18
    {
19
        // load the preview view

20
        return View::make('gravvy::preview');
21
    }
22
}

يجب أن يكون اسم وحدة التحكم مسبوقًا باسم الحزمة ، ويتم إلحاقه بـ _Controller - كما هو الحال مع وحدات التحكم العادية.

يمكننا إنشاء بعض المسارات لتعيين إجراءات وحدة التحكم الخاصة بنا إلى عناوين URL المعقولة ، ولكن ألن يكون من الأفضل إذا تمكنا من السماح لمستخدم حزمة لدينا أن يقرر استخدام URI الأساسي؟ هل من شأنه؟ دعونا نفعل ذلك بعد ذلك!

من خلال إضافة زوج "قيمة" = "" gravvy " إلى قيمة صفيف الحزم ، يمكننا السماح للمستخدم بتغييرها دون تغيير رمز الحزمة نفسها. وهنا التكوين الناتج فيالتطبيق / bundles.php .

1
return array(
2
3
    'docs' => array('handles' => 'docs'),
4
    'gravvy' => array(
5
        'auto'      => true,
6
        'handles'   => 'gravvy'
7
    )
8
9
);

يمكننا الآن استخدام حامل مكان (: الحزمة) في مساراتنا ، والتي سيتم استبدالها بقيمةخيار المقابض . لنقم بإنشاء ملف path.php داخل جذر حزمنا وإضافة بعض المسارات.

1
Route::get('(:bundle)/form', 'gravvy::preview@form');
2
Route::post('(:bundle)/preview', 'gravvy::preview@preview');

لدينا مسار GET gravvy / form الذي تم تعيينه إلى إجراء النموذج الخاصبوحدة تحكم Preview و POST gravvy / preview الذي تم تعيينه إلىإجراء المعاينة لجهاز التحكم Preview .

دعونا إنشاء المناظر المرتبطة لإجراءات تحكم لدينا. يمكنك جعلها معقدة وجميلة كما تحب ، لكنني سأبقيها بسيطة. أولاً ، أنشئ مجلد طرق عرض داخل الحزمة ، تمامًا كما هو الحال في دليل التطبيق.

1
<!-- /bundles/gravvy/views/form.blade.php -->
2
3
<form action="{{ URL::to_action('gravvy::preview@preview') }}" method="POST">
4
    <p><label for="name">Email Address:</label></p>
5
    <p><input type="text" name="email" /></p>
6
    <p><label for="name">Avatar Size:</label></p>
7
    <p><input type="text" name="size" /></p>
8
    <p><input type="submit" value="Preview!" /></p>
9
</form>

الآن وبعد أن أصبح لدينا نموذجًا يرسل بريدًا إلكترونيًا وحجمًا إلى زوج معاينة / إجراءالمعاينة @ المعاينة ، دعنا ننشئ صفحة معاينة للأفتار الذي تم إنشاؤه ؛ سنستخدم سمة ، تُسمى $ element ، للاحتفاظ بمصدرها.

1
<!-- /bundles/gravvy/views/preview.blade.php -->
2
3
<p>{{ $element }}</p>
4
<p>{{ HTML::link\_to\_action('gravvy::preview@form', '< Go Back!') }}</p>

يجب علينا الآن تغيير إجراء المعاينة للاستفادة من البيانات المرسلة من النموذج.

1
/**

2
 * Show the resulting avatar.

3
 */
4
public function action_preview()
5
{
6
    // get data from our form

7
    $email  = Input::get('email');
8
    $size   = Input::get('size');
9
10
    // generate the avatar

11
    $avatar = Gravvy::make($email, $size);
12
13
    // load the preview view

14
    return View::make('gravvy::preview')
15
        ->with('element', $avatar);
16
}

نقوم باسترداد بيانات POST واستخدامها لإنشاء الصورة الرمزية الخاصة بنا. يجب أيضًا إضافة طريقة with () إلى سلسلة View :: make () للسماح باستخدام العنصر داخل العرض.

يمكننا أخيرًا اختبار نظام معاينة الصورة الرمزية! إلقاء نظرة على URI/ gravvy / form وإعطائها الذهاب! كل شيء يعمل كما هو متوقع.

Gravvy ViewsGravvy ViewsGravvy Views

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


نشر حزمة

بمجرد أن تكون الحزمة الخاصة بك في حالة وظيفية ، قد ترغب في إدراجها ضمن دليل حزم Laravel . دعونا نجري عملية إرسال حزمة جديدة.

أولاً ، ستحتاج إلى الحصول على حساب GitHub ، وإصدار الحزمة الخاصة بك في مستودع عام. R

إذا كنت جديدًا في التحكم في الإصدار مع Git ، أقترح عليك قراءة سلسلة رائعة من مقالات Git هنا على Nettuts + .

بمجرد أن يكون لديك حسابك ورمزك بالترتيب ، تأكد من إمكانية العثور على أحدث إصدار من الحزمة الخاصة بك داخل الفرع "الرئيسي" ، وأن جذر الحزمة الخاصة بك (حيث يكونstart.php ) هو الجذر مستودع ، بدلا من دليل فرعي.

تفضل بزيارة موقع دليل حزم Laravel ، وقم بتسجيل الدخول باستخدام بيانات اعتماد GitHub.

github logingithub logingithub login

الآن انقر فوق الزر "إرسال حزمة" ، حدد مستودع الحزم الخاص بك من القائمة المنسدلة واضغط على زر "متابعة".

إن نموذج الاشتراك مستقيما تماما ، ولكن هنا بعض "المشاغل" التي قد لا تكتشفها.

اسم

الاسم هو الكلمة الأساسية الصغيرة المستخدمة في تثبيت التطبيق الخاص بك. يجب أن تكون كلمة قصيرة ولكنها دقيقة لوصف الحزمة الخاصة بك.

ملخص / الوصف

يمكن أن تحتوي هذه الحقول على محتوى تنسيق علامة نقش. لذا لا تتردد في نسخ المحتوى من ملف GitHub README.md الخاص بك .

التبعيات / العلامات

استخدم زر الفاصلة على لوحة المفاتيح لفصل العلامات والتوابع. يجب أن يحتوي حقل التبعيات على الكلمة الأساسية القصيرة التثبيت الخاصة بالحزمة الموجودة كعنصر تابع للحزمة التي ترسلها.

نشيط

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

بمجرد النقر فوق الزر "حفظ" ، تم إرسال الحزمة الخاصة بك ، وفي حالة وضع علامة "نشط" ، ستظهر في قوائم الحزمة. يمكنك دائمًا تعديل قائمة الحزمة الخاصة بك في وقت لاحق.


العثور على حزم

الحزم التي تم مشاركتها مع مجتمع Laravel مدرجة في دليل Bundles علىhttp://bundles.laravel.com .

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


تثبيت حزمة

بمجرد حصولك على الكلمة الأساسية لتثبيت حزمة ، يمكنك تثبيتها من قاعدة المشروع باستخدام واجهة سطر الأوامر 'Artisan' ، وهو أمر package: install . فمثلا

1
php artisan bundle:install bob

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

ستحتاج إلى إضافة اسم الحزمة يدويًا إلى الصفيف داخل التطبيق / bundles.php لتتمكن الحزمة من التمكين.

1
return array(
2
    'docs' => array('handles' => 'docs'),
3
    'bob'
4
);

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


شكرا للقراءة والاستمتاع إنشاء حزم خاصة بك مع Laravel! إذا كنت ترغب في معرفة المزيد عن Laravel ، فتأكد من اختيار كتابي !

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.