Sử dụng media library trong Laravel
Bài đăng này đã không được cập nhật trong 4 năm
1. Giới thiệu:
- Laravel medialibrary là một packet có thể giúp xử lý
mediatrongLaravel. Nó có thể sắp xếp các tệp của bạn trên nhiều hệ thống, tạo hình thu nhỏ, tối ưu hóa hình ảnh và hơn thế nữa. - Hiện tại
medialibrarymới ra phiên bản chính mới, v9, bổ sung rất nhiều tính năng tuyệt vời như hình ảnh đáp ứng, các thành phần vue để hỗ trợ tải lên, ...
2. Media collections:
-
Media collectionsđã tồn tại ra mắt rất nhiều phiên bản khác nhau nhưng đều cung cấp phần cơ bản là: -
Chúng cho phép bạn đưa các loại file khác nhau vào
collectioncủa riêng chúng. -
Ví dụ:
$newsItem = News::find(1);
$newsItem->addMedia($pathToImage)->toMediaCollection('images');
$newsItem->addMedia($pathToAnotherImage)->toMediaCollection('images');
$newsItem->addMedia($pathToPdfFile)->toMediaCollection('downloads');
$newsItem->addMedia($pathToAnExcelFile)->toMediaCollection('downloads');
- Cách lấy tất các
mediacủamodel:
// will return media instances for all files in the images collection
$newsItem->getMedia('images');
// will returns media instance for all files in the downloads collection
$newsItem->getMedia('downloads');
3. New functionalities:
- Trong v7,
media collectionscó thể không chỉ là một cái tên để nhóm các file. Bằng cách xác địnhmedia collectionstrong model của mình, bạn có thể thêm một số action nhất định vàocollection. - Để bắt đầu với
media collections, hãy thêm một chức năng có tênregisterMediaCollectionsvào model đã chuẩn bị của bạn. Bên trong chức năng đó, bạn có thể sử dụngaddMediaCollectionđể bắt đầu mộtmedia collection.
// in your model
public function registerMediaCollections()
{
$this->addMediaCollection('my-collection')
//add options
...
// you can define as much collections as needed
$this->addMediaCollection('my-other-collection')
//add options
...
}
- Kết quả:
$yourModel->addMedia('beautiful.jpg')->toMediaCollection('only-jpegs-please');
- Thao tác này sẽ trả về một ngoại lệ:
Spatie\MediaLibrary\Exceptions\FileCannotBeAdded\FileUnacceptableForCollection.
$yourModel->addMedia('ugly.ppt')->toMediaCollection('only-jpegs-please');
4. Using a specific disk:
- Bạn có thể đảm bảo rằng các file được thêm vào
colectionsẽ được tự động thêm vào mộtdisknhất định.
// in your model
public function registerMediaCollections()
{
$this
->addMediaCollection('big-files')
->useDisk('s3');
}
- Khi thêm file vào
colectioncủa tôi, tệp đó sẽ được lưu trữ trêndisk s3.
$yourModel->addMedia($pathToFile)->toMediaCollection('big-files');
- Bạn vẫn có thể chỉ định tên
disktheo cách thủ công khi thêm media. Trong ví dụ này, file sẽ được lưu trữ trêndiskthay thế thay vìs3.
$yourModel->addMedia($pathToFile)->toMediaCollection('big-files', 'alternative-disk');
5. Single file collections:
- Nếu bạn muốn một
collectionchỉ chứa mộtfile, bạn có thể sử dụngsingleFiletrêncollection. Một trường hợp sử dụng tốt cho điều này sẽ làcollectionhình đại diện trên mô hìnhuser. Trong hầu hết các trường hợp, bạn muốnuserchỉ có một hình đại diện.
// in your model
public function registerMediaCollections()
{
$this->addMediaCollection('avatar')
->singleFile();
}
- Lần đầu tiên bạn thêm
filevàocollection, file đó sẽ được lưu trữ như bình thường.
$yourModel->add($pathToImage)->toMediaCollection('avatar');
$yourModel->getMedia('avatar')->count(); // returns 1
$yourModel->getFirstUrl('avatar'); // will return an url to the `$pathToImage` file
- Khi thêm
filekhác vào một tập hợpfile,fileđầu tiên sẽ bị xóa.
// this will remove other files in the collection
$yourModel->add($anotherPathToImage)->toMediaCollection('avatar');
$yourModel->getMedia('avatar')->count(); // returns 1
$yourModel->getFirstUrl('avatar'); // will return an url to the `$anotherPathToImage` file
6. Registering media conversions:
- Trước tiên, bạn nên đọc phần chuyển đổi hình ảnh trước khi đọc các đoạn sau.
- Thông thường các chuyển đổi hình ảnh được đăng ký bên trong chức năng
registerMediaConversionstrên model của bạn. Tuy nhiên, chuyển đổi hình ảnh cũng có thể được đăng ký bên trongmedia collection.
public function registerMediaCollections()
{
$this
->addMediaCollection('my-collection')
->registerMediaConversions(function (Media $media) {
$this
->addMediaConversion('thumb')
->width(100)
->height(100);
});
}
- Khi thêm một hình ảnh vào
collectioncủa tôi, một hình thu nhỏ vừa với kích thước 100x100 sẽ được tạo.
$yourModel->add($pathToImage)->toMediaCollection('my-collection');
$yourModel->getFirstMediaUrl('thumb') // returns an url to a 100x100 version of the added image.
- Hãy xem phần xác định chuyển đổi để tìm hiểu tất cả các chức năng bạn có thể sử dụng cho
addMediaConversion.
7. Nguồn tham khảo:
- Cám ơn các bạn đã dành thời gian để cùng nhau tìm hiểu về
media collections. - Bên dưới là
linkmình đã tham khảo để hoàn thành bài viết: - https://freek.dev
- https://spatie.be/docs/laravel-medialibrary/v7/introduction
- https://github.com/spatie/laravel-medialibrary
All rights reserved