1. Go to this page and download the library: Download tobento/app-media library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
tobento / app-media example snippets
use Tobento\App\AppFactory;
use Tobento\App\Media\FeaturesInterface;
// Create the app
$app = new AppFactory()->createApp();
// Add directories:
$app->dirs()
->dir(realpath(__DIR__.'/../'), 'root')
->dir(realpath(__DIR__.'/../app/'), 'app')
->dir($app->dir('app').'config', 'config', group: 'config')
->dir($app->dir('root').'public', 'public')
->dir($app->dir('root').'vendor', 'vendor');
// Adding boots
$app->boot(\Tobento\App\Media\Boot\Media::class);
// Implemented interfaces:
$features = $app->get(FeaturesInterface::class);
// Run the app
$app->run();
'features' => [
new Feature\File(
// define the supported storages which have public urls:
supportedStorages: ['images'],
// you may throw exeptions if storage or file does not exist for debugging e.g.:
throw: true, // false default
),
],
use Tobento\App\Media\Feature\File;
use Tobento\Service\FileStorage\FileInterface;
use Tobento\Service\FileStorage\StorageInterface;
$fileUrl = $app->get(File::class)
->storage(storage: 'images')
->file(path: 'path/to/file.jpg')
->url();
$storage = $app->get(File::class)->storage(storage: 'images');
// StorageInterface
$file = $storage->file(path: 'path/to/file.jpg');
// FileInterface
'storages' => [
'files' => [
'factory' => \Tobento\App\FileStorage\FilesystemStorageFactory::class,
'config' => [
// The location storing the files:
'location' => directory('app').'storage/files/',
// Point to the file display feature route uri:
'public_url' => 'https://example.com/media/file/',
],
],
],
'features' => [
new Feature\FileDisplay(
// define the supported storages (public-only storages are allowed):
supportedStorages: ['images'],
// you may change the route uri:
routeUri: 'media/file/{storage}/{path*}', // default
// you may define a route domain:
routeDomain: 'media.example.com', // null is default
),
],
'features' => [
new Feature\FileDisplaySigned(
// define the supported storages (private-only storages are allowed):
supportedStorages: ['uploads-private'],
// you may change the route uri:
routeUri: 'media/s/file/{storage}/{path*}', // default
// you may define a route domain:
routeDomain: 'media.example.com', // null is default
),
],
'features' => [
new Feature\FileDownload(
// define the supported storages (public-only storages are allowed):
supportedStorages: ['images'],
// you may change the route uri:
routeUri: 'media/download/{storage}/{path*}', // default
// you may define a route domain:
routeDomain: 'media.example.com', // null is default
),
],
'features' => [
new Feature\FileDownloadSigned(
// define the supported storages (private-only storages are allowed):
supportedStorages: ['uploads-private'],
// you may change the route uri:
routeUri: 'media/s/download/{storage}/{path*}', // default
// you may define a route domain:
routeDomain: 'media.example.com', // null is default
),
],
'features' => [
new Feature\Icons(
// Define the directory where to store cached icons:
cacheDir: directory('app').'storage/icons/',
// You may enable to throw an exception if an icon is not found.
// This is useful during development, but in production, you may want to log a message instead (see below).
throwIconNotFoundException: true, // default is false
),
],
use Tobento\Service\Icon\IconInterface;
use Tobento\Service\Icon\IconsInterface;
final class SomeService
{
public function __construct(
private IconsInterface $icons,
) {
$icon = $icons->get('edit');
// IconInterface
}
}
'aliases' => [
\Tobento\App\Media\Icon\FallbackIcons::class => 'daily',
// or do not log at all:
\Tobento\App\Media\Icon\FallbackIcons::class => 'null',
],
'features' => [
new Feature\ImageEditor(
// define different image editors templates:
templates: [
'default' => [
'crop', 'resize', 'fit', // Used for cropping. You may uncomment all if you want to disable cropping.
'background', 'blur', 'brightness', 'contrast', 'colorize', 'flip', 'gamma', 'pixelate', 'rotate', 'sharpen',
'greyscale', 'sepia', // Filters
'quality', 'format',
],
],
// define the supported storages:
supportedStorages: ['uploads'],
// define the supported mime types:
supportedMimeTypes: ['image/png', 'image/jpeg', 'image/gif', 'image/webp'],
// you may define a custom image actions class:
imageActions: \Tobento\App\Media\Imager\ImageActions::class, // default
// define the user permission or null if no permission is needed (not recommended):
userPermission: 'media.image.editor', // default
// you may localize routes:
localizeRoute: true, // false (default)
),
],
'aliases' => [
// Logs if image processing fails:
\Tobento\App\Media\Upload\ImageProcessor::class => 'daily',
// or do not log at all:
\Tobento\App\Media\Upload\ImageProcessor::class => 'null',
// Logs if image action fails:
\Tobento\App\Media\Imager\ImageActions::class => 'daily',
// or do not log at all:
\Tobento\App\Media\Imager\ImageActions::class => 'null',
],
'features' => [
new Feature\Picture(
// Define the storage name where the generated picture metadata is stored.
// This storage should be private (not publicly accessible).
pictureStorageName: 'picture-data',
// Define the storage name where generated images are stored.
// This storage must be public (i.e. support URLs) so the images can be displayed.
imageStorageName: 'images',
// Queue used for generating images in the background:
queueName: 'file',
),
],
'aliases' => [
// Logs if picture generation fails:
\Tobento\App\Media\Picture\PictureGenerator::class => 'daily',
// or do not log at all:
\Tobento\App\Media\Picture\PictureGenerator::class => 'null',
],
<?= $view->picture(
// The path to the original image within the storage:
path: 'path/to/image.jpg',
// The storage name where the image is located:
resource: 'storage-name',
// The named picture definition to use:
definition: 'name',
// Whether to queue image generation (recommended):
queue: true, // default
// Whether private storages may be read:
allowPrivateStorage: false, // default
)->imgAttr('alt', 'Alt Text')
'features' => [
new Feature\PictureEditor(
// define different image editor templates:
templates: [
'default' => [
'crop', 'resize', 'fit', // Used for cropping. You may uncomment all if you want to disable cropping.
'background', 'blur', 'brightness', 'contrast', 'colorize', 'flip', 'gamma', 'pixelate', 'rotate', 'sharpen',
'greyscale', 'sepia', // Filters
'quality',
],
],
// define the supported storages:
supportedStorages: ['uploads'],
// define the supported mime types:
supportedMimeTypes: ['image/png', 'image/jpeg', 'image/gif', 'image/webp'],
// you may define a custom image actions class:
imageActions: \Tobento\App\Media\Image\ImageActions::class, // default
// define the user permission or null if no permission is needed (not recommended):
userPermission: 'media.picture.editor', // default
// you may localize routes:
localizeRoute: true, // false (default)
// Images will be generated in the background by the queue by default:
queuePictureGeneration: true, // true (default)
),
],
'aliases' => [
// Logs if picture generation fails:
\Tobento\App\Media\Picture\PictureGenerator::class => 'daily',
// or do not log at all:
\Tobento\App\Media\Picture\PictureGenerator::class => 'null',
// Logs if image processing fails:
\Tobento\App\Media\Upload\ImageProcessor::class => 'daily',
// or do not log at all:
\Tobento\App\Media\Upload\ImageProcessor::class => 'null',
// Logs if image action fails:
\Tobento\App\Media\Imager\ImageActions::class => 'daily',
// or do not log at all:
\Tobento\App\Media\Imager\ImageActions::class => 'null',
],
'features' => [
new Feature\FileDisplay(
// define the supported storages:
supportedStorages: ['images'],
// you may change the route uri:
routeUri: '{storage}/{path*}',
routeDomain: 'media.example.com',
),
],
'features' => [
new Feature\FileDisplay(
// define the supported storages:
supportedStorages: ['images'],
// you may change the route uri:
routeUri: '{storage}/{path*}',
// you may define a route domain:
routeDomain: 'media.example.com',
),
],
app/config/media.php
php ap icons:clear
app/config/logging.php
app/config/logging.php
app/config/logging.php
app/config/logging.php
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.