A PHP 7.4 / 8+ MVC Framework focusing on structure, adhering to the Single Responsibility Principle (SRP), Separation of Concerns (SoC), and Object-Oriented Programming (OOP).
- Project Overview
- Features
- Installation
- Directory Structure
- Configuration
- Usage
- Development Status
- Testing
- Contributing
- Support
- License
LangelerMVC is a custom-built PHP MVC framework designed to provide a highly structured and modular approach to building web applications. The framework adheres to important design principles such as:
- Single Responsibility Principle (SRP): Ensuring each class is responsible for only one part of the functionality.
- Separation of Concerns (SoC): Encouraging separation between distinct functionalities to enhance maintainability.
- Object-Oriented Programming (OOP): Utilizing OOP practices like inheritance, encapsulation, and polymorphism.
This framework is ideal for developers who want a solid foundation for building scalable PHP applications using modern best practices.
- MVC Architecture (Model-View-Controller)
- PHP 7.4+ Support
- Modular Design with Admin and User Modules
- SQL Integration with MySQL using PDO
- Custom Templating System with Layouts, Pages, Partials, and Components
- Security Features like 2FA (Two-Factor Authentication) and secure email verification
- Localization Support including locale management and number formatting
- Detailed Error and Exception Handling
- PSR-4 Autoloading
- Mailer Integration (SMTP)
- Shell Command Execution, Stream Handling, and Sockets
- Custom Validators and Sanitizers
- Unit and Integration Testing with PHPUnit
- PHP 7.4 or PHP 8.0+
- MySQL Database
- Composer
-
Clone the repository:
git clone https://github.com/langeler/LangelerMVC.git cd LangelerMVC
-
Install the dependencies:
composer install
-
Copy the example environment file and update settings:
cp .env.example .env
-
Set up your
.env
configuration file:APP_NAME="Langeler" APP_ENV=local APP_DEBUG=true APP_URL=http://localhost DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=langeler DB_USERNAME=root DB_PASSWORD=root
-
Set up your database:
php artisan migrate
-
Run the application:
php -S localhost:8000 -t Public/
LangelerMVC is designed with modularity in mind, making it easier to maintain and scale the application. Below is a complete breakdown of the core directory structure with detailed explanations of each subfolder.
LangelerMVC/
├── App/ # Core application code
│ ├── Abstracts/ # Abstract classes for common functionality
│ ├── Contracts/ # Interface contracts for dependency injection
│ ├── Core/ # Core framework logic, including bootstrap and initial loaders
│ ├── Database/ # Database layer, including migrations, models, repositories, seeds
│ │ ├── Migrations/ # Database migrations
│ │ ├── Models/ # Eloquent models or custom database models
│ │ ├── Repositories/ # Data access layers (Repository pattern)
│ │ ├── Seeds/ # Database seeders
│ ├── Exceptions/ # Custom exception classes for error handling
│ ├── Helpers/ # Utility helper classes for common operations
│ ├── Modules/ # Application modules, including Admin and User Modules
│ │ ├── AdminModule/ # Admin-specific logic and components
│ │ │ ├── Controllers/ # Admin controllers for handling requests
│ │ │ ├── Middlewares/ # Admin-specific middlewares for security and other purposes
│ │ │ ├── Requests/ # Request validation logic for Admin routes
│ │ │ ├── Responses/ # Response handling for Admin routes
│ │ │ ├── Routes/ # Admin route definitions
│ │ │ ├── Views/ # Views/templates related to the Admin panel
│ │ ├── UserModule/ # Similar to AdminModule, but for user-facing logic
│ ├── Presenters/ # Data presentation layer (e.g., formatting data for views)
│ ├── Resources/ # Static resources (CSS, JS, Images)
│ │ ├── css/ # Custom stylesheets
│ │ ├── images/ # Image files
│ │ ├── js/ # Custom JavaScript files
│ ├── Services/ # Service layer for handling complex operations
│ ├── Templates/ # Template files (layouts, components, partials, pages)
│ │ ├── Components/ # Reusable view components (e.g., buttons, modals)
│ │ ├── Layouts/ # Page layouts (e.g., header, footer)
│ │ ├── Pages/ # Individual page views
│ │ ├── Partials/ # Smaller reusable parts of pages (e.g., navigation)
│ ├── Utilities/ # Utility classes for additional functionalities
│ ├── Sanitation/ # Data sanitation methods and tools
│ ├── Validation/ # Custom validation logic and rules
├── Config/ # Configuration files for different aspects of the application
│ ├── app.php # Application-specific configuration
│ ├── database.php # Database connection configuration
│ ├── feature.php # Feature toggles and settings
│ ├── mail.php # Mail configuration settings
├── Data/ # SQL data dumps and seed files
│ ├── Carts.sql # Example SQL dump for carts table
│ ├── Orders.sql # Example SQL dump for orders table
│ ├── Products.sql # Example SQL dump for products table
│ ├── Users.sql # Example SQL dump for users table
├── Public/ # Public-facing files and assets
│ ├── assets/ # Frontend assets (CSS, JS, Images)
│ │ ├── css/ # Compiled and minified CSS
│ │ ├── images/ # Public images for the web app
│ │ ├── js/ # Compiled and minified JS
│ ├── .htaccess # URL rewriting and security rules
│ ├── index.php # Main entry point for the application
├── Storage/ # Storage for logs, cache, and uploaded files
│ ├── Cache/ # Cache files for performance improvements
│ ├── Logs/ # Log files for debugging
│ ├── Uploads/ # Uploaded user files
├── Tests/ # Unit and Integration test suites
│ ├── Integration/ # Integration tests for testing multiple parts together
│ ├── Unit/ # Unit tests for isolated testing of components
├── Vendor/ # Composer dependencies
├── .env # Application environment variables
├── .env.example # Example environment configuration file
├── .gitignore # Git ignore file
├── composer.json # Composer configuration for dependencies and autoloading
├── composer.lock # Composer lock file
└── README.md # Project documentation
APP_NAME="Langeler"
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=langeler
DB_USERNAME=root
DB_PASSWORD=root
Mail Configuration:
MAIL_DRIVER=smtp
MAIL_HOST=smtp.langeler.se
MAIL_PORT=587
MAIL_USERNAME=noreply@langeler.se
MAIL_PASSWORD=secret
MAIL_ENCRYPTION=tls
LangelerMVC uses a .htaccess
file for clean URL rewriting and security headers:
- Redirect all requests to
index.php
- Deny access to sensitive files like
.htaccess
,.env
, and Composer files - Add security headers for protection against MIME sniffing, XSS, and Clickjacking
The framework includes handlers for shell commands and stream management, making it easy to execute commands and manage file streams and sockets securely.
LangelerMVC is currently under active development, and several key features are still being implemented or refined. Below is a list of features currently being developed or improved:
- Advanced Routing: Additional support for RESTful routes and route groups.
- Admin Dashboard Enhancements: More features and UI improvements for the admin panel.
- User Module Improvements: Better user profile management, enhanced security, and user activity logging.
- More Built-in Validators: Including more built-in rules and support for custom validation logic.
- Localization: Improvements in multilingual support and content translation.
- Enhanced Security Features: Additional security layers, such as role-based access control (RBAC), and security auditing tools.
- Performance Optimizations: Optimizing SQL queries, caching, and memory usage for better performance.
Stay tuned for upcoming features and releases!
LangelerMVC supports unit and integration testing with PHPUnit.
To run the tests:
composer test
Tests are located in the Tests/
directory, separated into Unit and Integration tests.
Contributions are highly encouraged and welcome!
- Fork the repository.
- Create a feature branch:
git checkout -b my-feature
. - Commit your changes:
git commit -m 'Add a feature'
. - Push to the branch:
git push origin my-feature
. - Open a Pull Request.
For any issues, suggestions, or feature requests, feel free to:
- Open an Issue on GitHub.
- Contribute to the LangelerMVC Wiki.
This project is licensed under the MIT License. See the LICENSE file for details.
- Developer GitHub: https://github.com/langeler
- Project GitHub: https://github.com/langeler/LangelerMVC