Download the PHP package palgoal/media-library without Composer

On this page you can find all versions of the php package palgoal/media-library. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package media-library

palgoal/media-library

مكتبة وسائط (Media Library) مستقلة لـ Laravel: رفع، تصفح، بحث/فلترة، وتعديل ميتاداتا للملفات، بالإضافة إلى منتقي وسائط (Media Picker) قابل لإعادة الاستخدام في أي فورم — Single أو Multiple.

هذا المستودع مستقل بالكامل ولا يعتمد على أي مشروع Laravel بعينه. لا يفترض وجود App\Models\User، ولا أي View أو Route أو ملف CSS/JS خارج هذه الحزمة — كل ما هو خاص بالتطبيق المضيف يمرّ عبر config/media-library.php.

المحتوى

المتطلبات

Laravel PHP
10.x 8.1+
11.x 8.2+
12.x 8.2+

قاعدة البيانات: MySQL / MariaDB / PostgreSQL / SQLite (انظر ملاحظات التوافق أدناه).

Quick Start

لتجربة الحزمة خلال دقيقة واحدة:

ثم افتح:

التثبيت

من Packagist (بعد النشر)

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

كمستودع VCS مباشرة من GitHub

أضف الحزمة إلى composer.json الخاص بمشروعك:

ثم:

كـ path repository (تطوير محلي / مونوريبو)

الإعداد بعد التثبيت

الحزمة تُسجَّل تلقائياً عبر Laravel Package Discovery (extra.laravel.providers في composer.json). لا حاجة لإضافة الـ Service Provider يدوياً.

١. انشر الإعدادات والأصول والـ Views حسب الحاجة

إذا لم تنشر media-library-migrations، ستُحمَّل الـ migration تلقائياً من داخل الحزمة عند تشغيل migrate — لا حاجة لنسخها يدوياً في الحالة العادية.

ملاحظة: بعكس migration جدول media (تلقائية دائماً)، وسم media-library-relations-migration هو الوحيد الذي لا يُحمَّل تلقائياً إطلاقاً — يجب نشره صراحةً قبل php artisan migrate إن أردت استخدام ربط الوسائط بالموديلات (Concerns\HasMedia). راجع docs/HAS-MEDIA.md.

٢. شغّل الـ migration

٣. اربط التخزين إذا كنت تستخدم disk "public" (الافتراضي)

٤. اضبط config/media-library.php حسب مشروعك

أهم المفاتيح:

استخدام صفحة المكتبة

الرابط الافتراضي: /media-library (اسم الـ route: media-library.page). الـ API: /media-library/media/* (كل أسماء الـ routes تبدأ بـ media-library.media.).

الصفحة الكاملة (Blade + JS) جاهزة للاستخدام مباشرة بتصميم Tailwind مستقل، ويمكنك تخصيصها بنشر الـ views وتعديلها لتستخدم Layout مشروعك الخاص، أو (أسهل، بلا نشر أي ملف) عبر layout/breadcrumb في config — انظر القسم التالي.

دمج المكتبة داخل لوحة تحكم (Dashboard)

المكتبة تدعم التركيب داخل أي لوحة تحكم موجودة بالإعدادات فقط — بدون إضافة أي route، وبدون أي اعتماد على بنية مشروعك (لا App\...، ولا لوحة جاهزة كـ Filament/Nova/Voyager، ولا افتراض وجود routes/dashboard.php).

١. بادئة الرابط (Route Prefix)

هذا وحده كافٍ لتسجيل كل الروابط تحت /dashboard/media-library بدل /media-library — الحزمة تستخدم Route::prefix() القياسية في Laravel والتي تدعم مسارات متعددة الأجزاء أصلاً؛ لا تحتاج أي route file إضافي في مشروعك. أسماء الـ routes (media-library.page, media-library.media.index, ...) لا تتغيّر أبداً بتغيير هذا الإعداد، فأي route('media-library.media.index') في كودك يستمر بالعمل دون تعديل.

٢. الـ Layout

الصفحة الكاملة تُغلَّف بمكوّن ديناميكي (<x-dynamic-component>)، فيمكنك استبداله بأي Layout Component عندك يقبل $slot افتراضياً:

٣. الـ Breadcrumb

القيمة الافتراضية null تعني عدم عرض أي breadcrumb (كما كانت الحزمة سابقاً). عند ضبطها، تُعرض شريحة breadcrumb أعلى رأس الصفحة — آخر عنصر (أو أي عنصر بلا url) يُعرض كنص عادي بدل رابط.

مثال متكامل

بهذا الإعداد وحده، صفحة المكتبة تظهر على /dashboard/media-library، ملفوفة بـ Layout لوحتك الخاصة، مع breadcrumb يعكس مكانها داخل التنقل — دون تعديل أي ملف داخل الحزمة نفسها.

مثال: مشروع يستخدم Guard مختلفاً (Multi Guard)

مشاريع كثيرة لا تستخدم guard web الافتراضي للوحة التحكم، بل guard مخصصاً مثل admin. اضبط middleware وuser_model ليطابقا نفس الـ guard الذي تسجّل الدخول عبره لوحتك:

استخدم نفس Guard الذي تستخدمه لوحة التحكم لديك. استخدام auth فقط يعني استخدام الـ Guard الافتراضي (غالباً web).

استخدام منتقي الوسائط (Media Picker)

أضف المودال العام مرة واحدة فقط في نهاية الـ layout الرئيسي لمشروعك:

Single Picker

يُنشئ حقل <input type="hidden" name="logo_media_id"> يحمل id العنصر المختار من جدول media، بالإضافة إلى زر يفتح المودال ومعاينة مصغّرة.

Multiple Picker

القيمة المخزَّنة في الحقل المخفي تكون IDs مفصولة بفواصل (1,5,9).

تخصيص القيمة المخزَّنة

storeValue يتحكم فيما يُكتب داخل الحقل المخفي: id (افتراضي)، path، أو url.

يوصى باستخدام storeValue="id" وربط الوسائط باستخدام media.id أو Trait HasMedia. لا يُنصح بحفظ URL أو file_path كمراجع دائمة داخل قاعدة البيانات لأنهما قد يتغيران عند تغيير الـ Storage أو الـ Disk.

الأحداث القابلة للربط في JS

بعد التأكيد يُطلق المودال حدثين على window:

ربط الوسائط بأي Model (اختياري)

Palgoal\MediaLibrary\Concerns\HasMedia يتيح لأي Model في مشروعك (منتج، مستخدم، شركة...) أن يمتلك وسائط منظّمة في Collections مسمّاة (logo, cover, gallery, documents, ...) عبر جدول pivot عام واحد (mediables)، دون أي جدول أو migration خاص بكل Model، ودون أي تغيير في سلوك الحزمة أو الـ Picker الحاليين.

يجب أولاً نشر وتشغيل Migration الخاصة بـ mediables، وإلا ستفشل العلاقة بخطأ SQL:

يتطلب migration اختيارية منفصلة (php artisan vendor:publish --tag=media-library-relations-migration && php artisan migrate). الدليل الكامل بكل الأمثلة (صورة مفردة، معرض صور، شعار شركة، صورة مستخدم، مستندات، Soft Delete، Morph Map، الترتيب، وأكثر) في docs/HAS-MEDIA.md.

دورة حياة العلاقات

مثال: ربط الـ Picker مباشرة بـ HasMedia

مثال مختصر فقط — التفاصيل الكاملة والأمثلة الإضافية في docs/HAS-MEDIA.md.

تخصيص Policy

الـ Policy الافتراضية (Palgoal\MediaLibrary\Policies\MediaPolicy) تسمح لأي مستخدم مسجّل دخول بعرض/تعديل/حذف أي عنصر وسائط، بغض النظر عمّن رفعه. هذا قرار افتراضي متعمَّد يناسب لوحة تحكم بمستخدم واحد أو فريق موثوق — وليس افتراضاً آمناً لتطبيق متعدد المستخدمين غير الموثوقين. راجع SECURITY.md لتفاصيل أوسع.

لتخصيصها:

أو عطّل التسجيل التلقائي للـ Policy وسجّلها بنفسك:

مثال على Policy تقيّد الحذف/التعديل بصاحب الملف فقط:

تخصيص User model

علاقة Media::uploader() تستخدم — بالترتيب — config('media-library.user_model') ثم config('auth.providers.users.model'). إن لم يُحدَّد أيّهما، أو كان الكلاس المحدَّد غير موجود فعلياً، تُرمى RuntimeException واضحة بدل افتراض App\Models\User (الحزمة لا تفترض بنية تطبيق بعينه).

تخصيص disk وdirectory

إذا كان الـ disk المستخدم لا يدعم توليد روابط (url())، فإن Media::url (accessor) تعيد null بدل رمي استثناء — تحقق من القيمة قبل استخدامها إن كنت تستخدم disk غير قياسي.

مخاطر SVG

SVG غير مسموح افتراضياً في allowed_mimes / allowed_mimetypes. ملف SVG يمكن أن يحتوي <script> أو خصائص أحداث (onload, onerror) تُنفَّذ عند فتح الملف مباشرة أو تضمينه — وهي ثغرة Stored XSS معروفة وشائعة في أنظمة رفع الملفات. هذه الحزمة لا تحتوي أداة Sanitization لملفات SVG.

لا تُفعّل SVG إلا بعد إضافة تعقيم فعلي (مثل enshrined/svg-sanitize) يُطبَّق على كل ملف قبل حفظه. التفاصيل الكاملة في SECURITY.md.

توافق جدول media الموجود مسبقاً

الـ migration تتحقق عبر Schema::hasTable('media') وتتجاهل الإنشاء إن كان الجدول موجوداً مسبقاً — لكنها لا تتحقق من تطابق الأعمدة. إن كان لديك جدول media سابق (من حزمة أخرى أو كودك الخاص)، لن تفشل الـ migration، لكنك قد تواجه أخطاء SQL لاحقاً (عمود غير موجود) عند استخدام الـ Model/Controller إن كان المخطط غير متوافق. تحقّق من أعمدة الجدول الموجود فعلياً قبل التثبيت فوقه؛ لا تفترض عدم وجود أي تعارض لمجرد نجاح الـ migration بصمت. راجع تعليقات ملف الـ migration نفسه لمزيد من التفاصيل.

Upgrade Guide

هذا أول تدقيق (audit) رسمي للحزمة بعد استقلالها في مستودعها الخاص؛ لا يوجد إصدار موسوم سابق. عند الترقية من نسخة محلية أقدم غير موسومة (منسوخة يدوياً من PalgooalWeb مثلاً)، انتبه للتغييرات التالية:

Troubleshooting

الصور لا تظهر بعد الرفع (404 على الرابط) تأكد من تشغيل php artisan storage:link إن كنت تستخدم disk public، ومن أن APP_URL مضبوط بشكل صحيح.

419 Page Expired عند الرفع من صفحة المكتبة تأكد من أن window.MEDIA_CONFIG.csrfToken يصل فعلياً (راجع <meta name="csrf-token"> في الـ layout المنشور)، ومن أن الجلسة (session) تعمل بشكل صحيح خلف أي بروكسي/CDN.

403 عند محاولة الحذف رغم تسجيل الدخول هذا متوقَّع إن استبدلت الـ Policy الافتراضية بأخرى تقيّد الحذف على صاحب الملف أو دور معيّن — راجع تخصيص Policy.

خطأ SQL يخص عمود غير موجود في جدول media غالباً يعني وجود جدول media سابق بمخطط مختلف — راجع توافق جدول media الموجود مسبقاً.

رفع الملفات يفشل بصمت أو يظهر خطأ عام شغّل الطلب مع Accept: application/json وراجع نص الخطأ في الاستجابة (رسائل التحقق mimes/mimetypes/max تُعاد كما هي من Laravel Validation).

Security considerations

راجع SECURITY.md للتفاصيل الكاملة، وأبرزها: SVG معطّل افتراضياً، الـ Policy الافتراضية غير مخصَّصة للمستخدمين غير الموثوقين، ولا يوجد Foreign Key على uploader_id لأسباب تتعلق بقابلية النقل بين قواعد البيانات.

تعتمد الحزمة على آليات Laravel للتحقق من نوع الملف (MIME detection)، لكنها لا تقوم بتعقيم محتوى الملفات، لذلك يبقى SVG معطلاً افتراضياً حتى إضافة Sanitizer مناسب.

الاختبارات

الحزمة تستخدم Orchestra Testbench:

نقل الباكدج أو المساهمة

راجع CONTRIBUTING.md. هذا مستودع مستقل تماماً — لا تفترض وجود أي ملف من مشروع PalgooalWeb أو أي مشروع آخر عند العمل عليه أو نشره.

الترخيص

MIT


All versions of media-library with dependencies

PHP Build Version
Package Version
Requires php Version ^8.1
illuminate/auth Version ^10.0|^11.0|^12.0
illuminate/contracts Version ^10.0|^11.0|^12.0
illuminate/database Version ^10.0|^11.0|^12.0
illuminate/filesystem Version ^10.0|^11.0|^12.0
illuminate/http Version ^10.0|^11.0|^12.0
illuminate/routing Version ^10.0|^11.0|^12.0
illuminate/support Version ^10.0|^11.0|^12.0
illuminate/validation Version ^10.0|^11.0|^12.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package palgoal/media-library contains the following files

Loading the files please wait ...