Skip to content

Anfallnorr/FileManagerSystem

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

319 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

FileManagerSystem (v1.0.48)

FileManagerSystem is a Symfony bundle that provides easy and intuitive management of files and directories: creation, deletion, moving, MIME type handling, image resizing, and more.

It is designed to simplify file management within any Symfony application.

⚠️ State Management

This bundle is stateful: it maintains a navigation context (e.g. current directory, browsing state) across requests.

The state is securely isolated per user session, ensuring that each user interacts with their own file system context without interference.


πŸš€ Installation

Install the bundle via Composer:

composer require anfallnorr/file-manager-system

βš™οΈ Configuration

1. Register the Bundle

Add the bundle to your config/bundles.php file:

return [
    // ...
    Anfallnorr\FileManagerSystem\FileManagerSystem::class => ['all' => true],
];

2. AssetMapper Configuration (Optional)

Warning

If you want to use the built-in controller and assets provided by the bundle, create the following configuration files.

Create config/packages/file_manager_system.yaml:

framework:
    asset_mapper:
        paths:
            - '%kernel.project_dir%/vendor/anfallnorr/file-manager-system/assets'

Create config/routes/file_manager_system.yaml:

file_manager_system:
    resource: '../../vendor/anfallnorr/file-manager-system/src/Controller/'
    type: attribute
    prefix: /files-manager 

πŸ’‘ Usage

Service Injection

Inject the FileManagerService into your controller or service:

public function __construct(
    private FileManagerService $fmService
) {
    $this->fmService->setDefaultDirectory('/var/uploads');
}

For convenience in examples below:

$fmService = $this->fmService;

πŸ“‚ 1. Directory Management

πŸ“Œ Get the Default Upload Directory

$defaultDirectory = $fmService->getDefaultDirectory();
// Returns: /path/to/project/public/uploads

πŸ“Œ Set a New Default Upload Directory

$directory = $fmService
    ->setDefaultDirectory('/var/uploads')
    ->getDefaultDirectory();
// Returns: /path/to/project/var/uploads

πŸ“ 1.1. Listing Directories

The getDirs() method allows you to explore the file system with support for exclusions, depth control, and relative paths.

Method Signature:

getDirs(
    string $path = '/', 
    string $excludeDir = '', 
    string|array|null $depth = '== 0'
): array

Parameters:

  • $path β€” Base directory path to search within
  • $excludeDir β€” Directory name pattern to exclude from results
  • $depth β€” Depth filter using comparison operators (==, >, <)

Return Value:

  • array β€” List of directories with absolute and relative paths

Examples

Basic usage:

$dirs = $fmService->getDirs();
// Returns directories found at depth 0 in the default directory

List directories inside a specific subfolder:

$dirs = $fmService->getDirs(path: 'uploads');
// Returns all directories inside /uploads at depth 0

Control search depth:

$dirs = $fmService->getDirs(path: 'uploads', depth: '== 1');
// Returns only directories exactly 1 level below /uploads

Exclude specific directories:

$dirs = $fmService->getDirs(path: 'uploads', excludeDir: 'temp');
// Returns all directories except those containing "temp" in their path

Combine all parameters:

$dirs = $fmService->getDirs(path: 'uploads', excludeDir: 'temp', depth: '== 1');
// Returns directories at depth 1 under "uploads", excluding folders containing "temp"

πŸ“ 1.2. Creating Directories

Create a new directory within the default directory.

Method Signature:

createDir(
    string $directory, 
    bool $returnDetails = false
): array

Parameters:

  • $directory β€” Directory name (will be slugified automatically)
  • $returnDetails β€” If true, returns detailed path information

Return Value:

  • array β€” Directory details (if $returnDetails is true)

Examples

Simple directory creation:

$fmService->createDir(directory: 'Hello World!');
// Creates directory: /path/to/project/public/uploads/hello-world

Get detailed information:

$details = $fmService->createDir(directory: 'Hello World!', returnDetails: true);
// Returns:
// [
//     'absolute' => '/var/www/absolute/path/hello-world',
//     'relative' => '/path/hello-world',
//     'ltrimmed_relative' => 'path/hello-world',
//     'foldername' => 'hello-world'
// ]

πŸ“„ 2. File Management

πŸ“„ 2.1. Listing Files

The getFiles() method offers complete control over file search: depth, extension, folder filtering, and more.

Method Signature:

getFiles(
    string $path = '/', 
    string|array|null $depth = '== 0', 
    ?string $folder = null, 
    ?string $ext = null
): array|bool

Parameters:

  • $path β€” Base directory path to search within
  • $depth β€” Depth filter using comparison operators (==, >, <)
  • $folder β€” Filter files by folder name (partial match)
  • $ext β€” Filter by file extension (without dot)

Return Value:

  • array β€” List of files with paths and metadata
  • false β€” If no files are found

Examples

Get files from default directory:

$files = $fmService->getFiles();
// Returns files at depth 0 from the default directory, or false if none found

Get files from a subfolder:

$files = $fmService->getFiles(path: 'uploads');
// Returns files from /uploads at depth 0

Limit search by depth:

$files = $fmService->getFiles(path: 'uploads', depth: '== 1');
// Returns files located exactly 1 level below /uploads

Filter by folder name:

$files = $fmService->getFiles(path: 'uploads', folder: 'images');
// Returns only files within folders containing "images"

Filter by file extension:

$files = $fmService->getFiles(path: 'uploads', ext: 'jpg');
// Returns only .jpg files

Combine all filters:

$files = $fmService->getFiles(
    path: 'uploads', 
    depth: '== 2', 
    folder: 'products', 
    ext: 'png'
);
// Returns .png files inside folders containing "products", at depth 2 under "uploads"

πŸ“„ 2.2. Creating Files

Create a new file with optional content.

Method Signature:

createFile(
    string $filename, 
    string $content = '<!DOCTYPE html><html lang="en"><body style="background: #ffffff;"></body></html>'
): void

Parameters:

  • $filename β€” File name (will be slugified automatically)
  • $content β€” File content (defaults to basic HTML template)

Return Value:

  • void

Examples

Create an HTML file with custom content:

$fmService->createFile(
    filename: 'Hello World.html',
    content: 'Hello World! I\'m Js Info'
);
// Creates: /path/to/project/public/uploads/hello-world.html

Create a file with default HTML template:

$fmService->createFile(filename: 'welcome.html');
// Creates file with default HTML content

πŸ“„ 2.3. Uploading Files

The upload() method allows you to upload one or multiple files to a specific directory. It handles filename slugification, optional renaming, and automatically generates useful metadata (size, MIME type, dimensions, etc.).

Method Signature:

upload(
	UploadedFile|array $files,
	string $folder,
	string $newName = '',
	bool $returnDetails = false
): array|bool

Parameters:

  • $files β€” A single UploadedFile instance or an array of files
  • $folder β€” Target directory (absolute path recommended)
  • $newName β€” Optional new filename (for multiple files, a numeric suffix will be added)
  • $returnDetails β€” If true, returns detailed information about uploaded files

Return Value:

  • array β€” Detailed information about uploaded files (if $returnDetails is true)
  • true β€” If upload succeeds and $returnDetails is false

Examples

Upload a single file:

$fmService->upload($file, '/var/www/uploads');

Upload a file with a custom name and get details:

$uploaded = $fmService->upload(
	$file,
	'/var/www/uploads',
	'my-file',
	true
);

// Example result:
[
	[
		'absolute' => '/var/www/uploads/my-file.jpg',
		'relative' => 'uploads/my-file.jpg',
		'filename' => 'my-file.jpg',
		'filesize' => '1.2 MB',
		'filemtime' => 1698200000,
		'extension' => 'jpg',
		'mime' => 'image/jpeg',
		'dimensions' => ['width' => 800, 'height' => 600]
	]
]

πŸ”§ 3. Utilities

🧩 Retrieve All Available MIME Types

Get a complete list of supported MIME types.

$mimeTypes = $fmService->getMimeTypes();
// Returns: ['pdf' => 'application/pdf', 'jpg' => 'image/jpeg', ...]

🧩 Get MIME Type for Specific Extension

Retrieve the MIME type for a given file extension.

$mimeType = $fmService->getMimeType(key: 'pdf');
// Returns: 'application/pdf'

🧩 Create URL-Friendly Slugs

Convert any string into a URL-safe slug.

$slug = $fmService->createSlug('Hello World !');
// Returns: 'hello-world'

🎨 4. Optional: Twig Integration

If you are using Twig and want Bootstrap-styled forms, add the following to your Twig configuration.

Edit config/packages/twig.yaml:

twig:
    form_themes: ['bootstrap_5_layout.html.twig']

πŸ“š Additional Resources


πŸ“ License

This bundle is open-source and available under the MIT License.

Packages

 
 
 

Contributors