Laravel is a popular PHP framework that simplifies the development process of web applications. However, every new project requires a lot of initial setup work, such as configuring authentication, handling user roles and permissions, setting up email services, and so on.
Laravel Boilerplate comes to the rescue by providing a standardized, well-structured foundation that you can use to jumpstart your projects. This blog explores what Laravel Boilerplate is, its installation, and how it works.
Let's get started!
What Is Laravel Boilerplate?
Laravel boilerplate is a pre-configured setup or template that provides a starting point for building web applications with Laravel. It saves time and effort by setting up a basic structure with pre-installed packages and configurations that can be used as a starting point for a new Laravel project.
Laravel boilerplate includes common features such as authentication, user management, and UI templates. Besides, it can be customized and extended to meet specific project requirements.
Using Laravel boilerplate can help avoid common errors and bugs, improve productivity, and ensure consistent project code structure.
Features of Laravel Boilerplate
Some features of Laravel Boilerplate include:
- Authentication and Authorization: Laravel Boilerplate includes a complete user authentication and authorization system out of the box. It provides user registration, login, password reset, and account activation functionality. Additionally, it supports role-based permissions and access control, allowing you to define user roles and manage their permissions easily.
- User Management: With Laravel Boilerplate, managing user accounts becomes effortless. It offers features like user profile management, user avatars, and account settings. You can easily extend the user management functionality to suit your project requirements.
- Admin Panel: Laravel Boilerplate includes an admin panel that allows you to manage various aspects of your application, such as users, roles, permissions, content, and settings. The admin panel provides a user-friendly interface for performing administrative tasks and can be customized to fit your specific needs.
- Frontend Templates: The boilerplate includes responsive and customizable frontend templates that provide a starting point for building user interfaces. These templates are designed to be visually appealing and can be easily modified to match your application's branding and design requirements. Included are User Dashboards, User Account Management, Two Factor Authentication, Social Logins, and reCAPTCHA.
- Asset Management: Laravel Boilerplate utilizes Laravel Mix, a powerful asset management tool. It simplifies the process of managing CSS, JavaScript, and other assets by providing an elegant API and seamless integration with popular frontend frameworks and libraries.
- API Support: If you're building an API-centric application, Laravel Boilerplate offers built-in support for building and consuming APIs. It includes features like API authentication, rate limiting, and API documentation generation using tools like Laravel Passport and Swagger.
- Testing and Debugging: Laravel Boilerplate encourages and facilitates writing tests for your application. It includes testing utilities and provides a testing environment preconfigured with popular testing frameworks like PHPUnit. It also integrates with Laravel Debugbar, a useful debugging toolbar that provides insights into the application's performance and execution flow.
- Modular Structure: Laravel Boilerplate promotes a modular approach to application development. It organizes your codebase into modules, making it easier to manage and maintain large-scale projects. Modules encapsulate related functionality and can be developed and tested independently.
Installation and Setup
Prerequisites
- Ensure you have PHP installed on your system (compatible version with Laravel).
- Make sure you have Composer installed, which is a dependency manager for PHP.
Laravel Installation
Download the zip files and extract them to your preferred directory. Alternatively, you can clone the GitHub repository.
git clone https://github.com/rappasoft/laravel-boilerplate.git laravel_boilerplate
Copy the .env.example
content to .env
file.
cp -r .env.example .env
Next, configure the database details.
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret
Now install the dependencies.
composer update
composer install
Then install the frontend assets.
npm install
Next, generate a unique key for your application.
php artisan key:generate
Then, migrate the changes while seeding the database.
php artisan migrate --seed
Link the assets to the public folder.
php artisan storage:link
Then, start the dev servers.
npm run dev php artisan serve
You can now log in to the application using the following details:
Username: admin@admin.com
Password: secret
Laravel Boilerplate may have additional configuration steps depending on the specific features you plan to use. You can change the default configurations in the config/boilerplate.php
file.
Directory Structure
The boilerplate follows Laravel's standard directory structure but introduces additional directories and files to provide a modular and organized approach to building Laravel applications.
Here are the main components and directories specific to the Laravel Boilerplate.
app
: This directory contains the core application code. It includes directories for Models, Services, Http (Controllers, Middleware, Livewire, Requests), and other components.
config
: This directory contains various configuration files for Laravel and additional configuration specific to Laravel Boilerplate. These include files like
app.php
, database.php
, and boilerplate.php
for boilerplate-specific configuration.
database
: The migrations
directory includes database migration files that define the structure of the database tables.
The seeders
directory may include seed files for populating the database with sample data.
public
: The directory contains the publicly accessible files for the application.
resources
: It contains frontend-related assets and resources. The lang/
directory includes language files for localization. The views/ directory contains Blade templates for generating HTML views.
The views are grouped into backend, components, errors, frontend, includes and vendor.
routes
: It contains route definitions for the application. The web.php
file includes routes for handling web requests. The api.php
file includes routes for handling API requests.
tests
: The directory contains test cases for the application. It includes both unit tests and feature tests to ensure the functionality of the application.
vendor
: This directory is generated after running the composer install
command and contains the installed dependencies managed by Composer.
Core Components
Laravel Boilerplate core components work together to provide a solid foundation for building Laravel applications. Some of them include:
Models
Laravel Boilerplate organizes Models by domain and uses traits to organize each model:
- Attribute/MODELAttribute: Holds the attribute modifiers for the given model.
- Method/MODELMethod: Holds the methods for the given model.
- Relationship/MODELRelationship: Holds the relationships for the given model.
- Scope/MODELScope - Holds the scopes for the given model.
Controllers
Controllers handle the application's HTTP requests and responses. They receive user input, interact with models and services, and return views or JSON responses.
For example, the DashboardController
controller in the app/Http/Controllers/Backend
file handles requests related to the backend/dashboard functionality.
<?php
namespace App\Http\Controllers\Backend;
/**
* Class DashboardController.
*/
class DashboardController
{
/**
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
*/
public function index()
{
return view('backend.dashboard');
}
}
The index
method is reachable via the backend route located in the routes/backend/admin.php
.
Routes
Routes, defined in the routes/web.php
file, define the endpoints of your application and map them to the appropriate controller methods. For example, here is the route leading to the backend dashboard.
<?php
use App\Http\Controllers\Backend\DashboardController;
use Tabuna\Breadcrumbs\Trail;
// All route names are prefixed with 'admin.'.
Route::redirect('/', '/admin/dashboard', 301);
Route::get('dashboard', [DashboardController::class, 'index'])
->name('dashboard')
->breadcrumbs(function (Trail $trail) {
$trail->push(__('Home'), route('admin.dashboard'));
});
On accessing the route, the index()
method of the DashboardController
gets executed. Additionally, the route assigns the name 'dashboard'
to the route and sets up breadcrumbs with a single item labeled 'Home'
, which is linked to the 'admin.dashboard'
route. The __('Home')
is a localization function that retrieves the translated label based on the application's language settings.
Configuration Files
Laravel Boilerplate includes configuration files that allow you to customize various aspects of your application. These files are located in the config
directory and cover settings such as database connections, cache configurations, and session drivers. You can modify these files to adapt the application to your specific requirements.
Middleware
Middleware provides a way to filter HTTP requests and take actions before they reach the intended destination.
Laravel Boilerplate includes middleware for authentication, role-based permissions, and other common scenarios.Most of the middleware that are not Laravel default. The most common ones and their namespaces include:
- App\Domains\Auth\Http\Middleware\AdminCheck - Checks whether the current user is an administrator.
- App\Domains\Auth\Http\Middleware\SuperAdminCheck - Verifies whether the current user is an administrator and has all roles and permissions.
- App\Domains\Auth\Http\Middleware\PasswordExpires - Sends users to the change password page if their passwords are expired based on the configs.
- App\Domains\Auth\Http\Middleware\ToBeLoggedOut - Verifies if the current users to_be_logged_out boolean is set to true and logs them out if so.
- App\Domains\Auth\Http\Middleware\TwoFactorAuthenticationStatus - Checks to see if 2FA is needed for the current route.
- App\Domains\Auth\Http\Middleware\UserCheck - Passes if the current user is of type user.
- App\Domains\Auth\Http\Middleware\UserTypeCheck - Checks to see if the current user is of the type passed in.
- App\Http\Middleware\LocaleMiddleware - Switches the current locale.
Authentication and Authorization
Laravel Boilerplate provides built-in authentication and authorization features integrated with Laravel's native authentication system. These features enable you to handle user authentication, define roles and permissions, and control access to various parts of your application. Let's explore some of these features.
Authentication
Laravel Boilerplate includes a pre-configured authentication system that provides user registration, login, and logout functionality. The register, login, and logout views are found in the respective routes in the routes/frontend/auth.php
file.
Route::group(['middleware' => 'guest'], function () {
// Authentication
Route::get('login', [LoginController::class, 'showLoginForm'])->name('login');
Route::post('login', [LoginController::class, 'login']);
// Registration
Route::get('register', [RegisterController::class, 'showRegistrationForm'])->name('register');
Route::post('register', [RegisterController::class, 'register']);
});
Likewise, you can access views in the frontend directory. For example, the user details are collected in the resources/views/frontend/auth/register.blade.php
file.
Authorization
Laravel Boilerplate extends Laravel's authorization features to include roles and permissions.
Roles
Roles define the access level and responsibilities of a user. Laravel Boilerplate provides a pre-defined set of roles, such as admin
and user
. Roles can be assigned to users, and access control can be defined based on roles.
Here's an example of assigning a role to a user:
$user = User::find(1);
$user->assignRole('admin');
Permissions
Permissions define specific actions or operations that users can perform. Permissions can be assigned to roles, and access control can be managed based on permissions.
Laravel Boilerplate defines permissions in the database/seeders/Auth/PermissionRoleSeeder.php
file and manages them through the Spatie package. Here's an example of assigning a permission to a role:
// Create Roles
Role::create([
'id' => 1,
'type' => User::TYPE_ADMIN,
'name' => 'Administrator',
]);
// Users category
$users = Permission::create([
'type' => User::TYPE_ADMIN,
'name' => 'admin.access.user',
'description' => 'All User Permissions',
]);
Guards
Guards define how authentication is handled for different user types. Laravel Boilerplate includes multiple guards, such as web
(default web guard), api
(for API authentication), and admin
(for admin panel authentication). You can configure guards in the config/auth.php
file.
'guards' => [
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
],
By utilizing guards, you can protect routes or controller methods to allow only authenticated users with specific roles or permissions to access them.
Route::middleware(['auth:admin', 'role:admin'])->group(function () {
// Routes accessible by authenticated admin users with 'admin' role
});
Conclusion
Laravel Boilerplate can save you significant time and effort when starting a new web application project with Laravel. It provides a solid, well-structured foundation and is easy to customize, allowing you to focus on building your application's unique features rather than worrying about the initial setup.
Whether a beginner or an experienced developer, Laravel Boilerplate can be a valuable tool. It streamlines your development process and helps you deliver high-quality applications faster.