السلام عليكم, الحمد لله أشارك أول حزمة Laravel قمت بنشرها، وذلك لسببين رئيسيين:
- أولًا، للمساهمة في دعم المجتمع العربي ببرمجيات مفتوحة المصدر.
- ثانيًا، للتعمق أكثر في تقنيات Laravel.
هذه الحزمة عبارة عن أداة لتحسين السيو (SEO) باللغة العربية لمواقع وتطبيقات Laravel، وتشمل إنشاء الوسوم التعريفية (Meta tags) وتوليد Slug باللغة العربية بشكل تلقائي.
الحزمة بسيطة وفعّالة، وتهدف إلى جعل المواقع العربية المبنية بـ Laravel أكثر توافقًا مع محركات البحث.
بدأت بأساسيات العمل، وسأقوم بإضافة مزيد من الميزات تدريجيًا إن شاء الله. وأتمنى أن تكون مفيدة لمجتمع المطورين العرب قريبًا.
رابط Packagist: https://packagist.org/packages/mohcin/laravel-arabic-seo
رابط GitHub: https://github.com/MohcinBN/laravel-arabic-seo
سأقوم قريبًا بربط التحديثات التلقائية بين GitHub وPackagist. وسأستمر في مشاركة آخر التحديثات حول هذه الحزمة بشكل دوري.
دعواتكم.
#Laravel #openSource #PHP
- أولًا، للمساهمة في دعم المجتمع العربي ببرمجيات مفتوحة المصدر.
- ثانيًا، للتعمق أكثر في تقنيات Laravel.
هذه الحزمة عبارة عن أداة لتحسين السيو (SEO) باللغة العربية لمواقع وتطبيقات Laravel، وتشمل إنشاء الوسوم التعريفية (Meta tags) وتوليد Slug باللغة العربية بشكل تلقائي.
الحزمة بسيطة وفعّالة، وتهدف إلى جعل المواقع العربية المبنية بـ Laravel أكثر توافقًا مع محركات البحث.
بدأت بأساسيات العمل، وسأقوم بإضافة مزيد من الميزات تدريجيًا إن شاء الله. وأتمنى أن تكون مفيدة لمجتمع المطورين العرب قريبًا.
رابط Packagist: https://packagist.org/packages/mohcin/laravel-arabic-seo
رابط GitHub: https://github.com/MohcinBN/laravel-arabic-seo
سأقوم قريبًا بربط التحديثات التلقائية بين GitHub وPackagist. وسأستمر في مشاركة آخر التحديثات حول هذه الحزمة بشكل دوري.
دعواتكم.
#Laravel #openSource #PHP
packagist.org
mohcin/laravel-arabic-seo - Packagist
A Laravel package for Arabic SEO optimization, including meta tags and slug generation
🔥3❤1
عند استخدام Laravel Factories في اختباراتك، احرص على التمييز بين make() و create()، فالأمر بالغ الأهمية في سياق اختبارات قواعد البيانات.
- حالة استخدام:
ترغب في اختبار إمكانية إنشاء Category جديدة:
it('can create a category', function () {
$categoryData = CategoryFactory::new()->make()->toArray();
$response = $this->post(route('category.store'), $categoryData);
$this->assertDatabaseHas('categories', [
'name' => $categoryData['name'],
'slug' => $categoryData['slug'],
]);
$response->assertStatus(302);
expect(Category::count())->toBe(1);
});
هذا الاختبار سيؤدي إلى نتيجة خاطئة Assertion Failure في الغالب،، وذلك لأن make() تُنشئ Collection دون حفظه في قاعدة البيانات، ومع استخدام RefreshDatabase تُفقد البيانات بعد عملية إعادة التوجيه التي يقم بها ال Route.
الحل: استبدل make() بـ create():
$categoryData = CategoryFactory::new()->create()->toArray();
- ال make() تُنشئ ال Collection فقط دون حفظه في قاعدة البيانات.
- ال create() تُنشئ Collection وتُخزّنه في قاعدة البيانات مباشرة.
#Laravel #Factories #PHP #Backend #TDD #programming
- حالة استخدام:
ترغب في اختبار إمكانية إنشاء Category جديدة:
it('can create a category', function () {
$categoryData = CategoryFactory::new()->make()->toArray();
$response = $this->post(route('category.store'), $categoryData);
$this->assertDatabaseHas('categories', [
'name' => $categoryData['name'],
'slug' => $categoryData['slug'],
]);
$response->assertStatus(302);
expect(Category::count())->toBe(1);
});
هذا الاختبار سيؤدي إلى نتيجة خاطئة Assertion Failure في الغالب،، وذلك لأن make() تُنشئ Collection دون حفظه في قاعدة البيانات، ومع استخدام RefreshDatabase تُفقد البيانات بعد عملية إعادة التوجيه التي يقم بها ال Route.
الحل: استبدل make() بـ create():
$categoryData = CategoryFactory::new()->create()->toArray();
- ال make() تُنشئ ال Collection فقط دون حفظه في قاعدة البيانات.
- ال create() تُنشئ Collection وتُخزّنه في قاعدة البيانات مباشرة.
#Laravel #Factories #PHP #Backend #TDD #programming
إنشاء قاعدة بيانات خاصة للاختبارات هو من أفضل الممارسات أثناء تطوير تطبيقات عموما، حيث يضمن عدم التأثير على بياناتك الحقيقية ويوفر بيئة نظيفة لتجربة الكود واكتشاف الأخطاء.
في laravel إليك كيف تقوم بذلك:
الخطوات:
إنشاء قاعدة بيانات جديدة للاختبارات،
كيف؟
انشاء و تعديل ملف .env.testing ليحتوي على إعدادات قاعدة البيانات الجديدة، الذي ستكون قد أنشأتها. لا تحتاج لان تملئها بأي table، ال php artisan migrate --env=testing ستقوم اوتوماتيكيا بملأ قاعدة بيانات الاختبارات بال migrations الموجودة لديك.
ما الذي تكسبه من هذه الطريقة؟
- عزل بيانات الاختبار عن بيانات التطوير والإنتاج.
- تشغيل الاختبارات بأمان دون القلق من حذف أو تعديل بيانات حقيقية.
- تسريع وتسهيل عملية تصحيح الأخطاء
- إنشاء بيئة مخصصة للاختبار يمكن إعادة ضبطها بسهولة
#Laravel #TDD #testing #php
في laravel إليك كيف تقوم بذلك:
الخطوات:
إنشاء قاعدة بيانات جديدة للاختبارات،
كيف؟
انشاء و تعديل ملف .env.testing ليحتوي على إعدادات قاعدة البيانات الجديدة، الذي ستكون قد أنشأتها. لا تحتاج لان تملئها بأي table، ال php artisan migrate --env=testing ستقوم اوتوماتيكيا بملأ قاعدة بيانات الاختبارات بال migrations الموجودة لديك.
ما الذي تكسبه من هذه الطريقة؟
- عزل بيانات الاختبار عن بيانات التطوير والإنتاج.
- تشغيل الاختبارات بأمان دون القلق من حذف أو تعديل بيانات حقيقية.
- تسريع وتسهيل عملية تصحيح الأخطاء
- إنشاء بيئة مخصصة للاختبار يمكن إعادة ضبطها بسهولة
#Laravel #TDD #testing #php
👍3👌1
الـ Eager Loading في أي ORM (Object-Relational Mapping) هو أسلوب لتحسين الأداء عند جلب البيانات المرتبطة (relations) من قواعد البيانات. يُستخدم لتقليل عدد ال queries التي تُنفذ، ويمنع مشكلة الـ N+1 queries.
غالبًا ما يُستخدم Eager Loading لاسترجاع بيانات من جدول رئيسي مع العلاقات المرتبطة به، والتي قد تكون مثلاً من خلال جداول Pivots في العلاقات من نوع many-to-many.
مثال:
بدلًا من تنفيذ query مثل:
يمكنك في Laravel استخدام Eager Loading بهذه الطريقة:
وإذا كنت تريد فقط جلب الـ Posts التي لها Categories تحقق شرطًا معينًا، يمكنك استخدام whereHas Clause:
- الـwith() تستخدم في Laravel للـ Eager Loading.
- الـwhereHas() تستخدم ل filter النتائج بناءً على شروط داخل العلاقة.
- الفكرة ليست اختصار Query معقدة فقط، بل تحسين الأداء وتجنب التكرار غير الضروري في الاستعلامات.. وجعلها readable
#Laravel #PHP #EagerLoading #SQL #ORM
غالبًا ما يُستخدم Eager Loading لاسترجاع بيانات من جدول رئيسي مع العلاقات المرتبطة به، والتي قد تكون مثلاً من خلال جداول Pivots في العلاقات من نوع many-to-many.
مثال:
بدلًا من تنفيذ query مثل:
FROM posts
INNER JOIN category_post ON posts.id = category_post.post_id
INNER JOIN categories ON categories.id = category_post.category_id
WHERE posts.status = 'published';
يمكنك في Laravel استخدام Eager Loading بهذه الطريقة:
Post::with('categories')->where('status', 'published')->get();
وإذا كنت تريد فقط جلب الـ Posts التي لها Categories تحقق شرطًا معينًا، يمكنك استخدام whereHas Clause:
$query->where('name', 'like', '%PHP%');
})->with('categories')->get();
- الـwith() تستخدم في Laravel للـ Eager Loading.
- الـwhereHas() تستخدم ل filter النتائج بناءً على شروط داخل العلاقة.
- الفكرة ليست اختصار Query معقدة فقط، بل تحسين الأداء وتجنب التكرار غير الضروري في الاستعلامات.. وجعلها readable
#Laravel #PHP #EagerLoading #SQL #ORM
ال sql fundamentals ضرورية، لكتابة QUERIES صحيحة و Optimized لكن لدي مؤاخدة بسيطة على كثير من الناس التي تقول ان كتابة CRUD مع ال ORM سهلة جدا..، كتابة ال crud operations ليست سهلة في المشاريع المعقدة.. التي تحتاج inputs validations كثيرة، و updates ضخمة، و requests كثيرة،.. الامر ليس بالسهولة التي يتم تصويرها.
خصوصا لو اردت كتابة كود نقي، و يتبع مبادئ ال solid و ال dry.. انذاك تصبح عملية كتابة الكود صعيبة في البداية، لكن التعامل معه و تعديله مستقبلا يصير سهل.
و الله اعلى و اعلم.
#Laravel #ORM #SQL
خصوصا لو اردت كتابة كود نقي، و يتبع مبادئ ال solid و ال dry.. انذاك تصبح عملية كتابة الكود صعيبة في البداية، لكن التعامل معه و تعديله مستقبلا يصير سهل.
و الله اعلى و اعلم.
#Laravel #ORM #SQL
❤2
منشور لكل شركة او مطور يبنون منتجا عربيا مبنيا على PHP/Laravel
انا مستعد لتخصيص قليل من وقتي اسبوعيا بالمجان للمساعدة في اخراج المنتوج او ال MVP الخاص به، (بشرط أن لا يوثر هذا على عملي و على أمانتي اتجاه المؤسسة التي اعمل بها حاليا).
دوافعي لهذا:
- المساهمة في المشاريع العربية التقنية الجادة.
- تقوية مهاراتي عمووما في هندسة البرمجيات.
- التعلم المستمر
المرجوا مشاركة هذا المنشور لعله ينفعني و ينفع غيري.
#Laravel #PHP #opensource #non_profit
انا مستعد لتخصيص قليل من وقتي اسبوعيا بالمجان للمساعدة في اخراج المنتوج او ال MVP الخاص به، (بشرط أن لا يوثر هذا على عملي و على أمانتي اتجاه المؤسسة التي اعمل بها حاليا).
دوافعي لهذا:
- المساهمة في المشاريع العربية التقنية الجادة.
- تقوية مهاراتي عمووما في هندسة البرمجيات.
- التعلم المستمر
المرجوا مشاركة هذا المنشور لعله ينفعني و ينفع غيري.
#Laravel #PHP #opensource #non_profit
❤8