In my previous post, we have seen how to install Laravel on Windows using XAMPP. In this tutorial we will see the directory structure of Laravel. Before jumping into the explanation let’s check how default laravel directory structure looks like.
As you can see, there are 10 folders and 14 files (with different extension) in default Laravel folder structure. We will discuss each of them one by one.
Laravel Directory Structure:
App directory is the heart of laravel application. Almost all of the classes of your application will fall under this directory. It is loaded by Composer using PSR-4 autoloading standard. App directory has also sub directories which you can see below.
- Console Directory: This directory contains all of the custom Artisan commands. Usually these command can be generated by
- Exception Directory: This directory contains the exception handling of your laravel application.
- HTTP Directory: This directory contains controller, middleware and form request.
- Models Directory: This directory contains all of your eloquent model classes (Laravel ORM).
- Providers Directory: This directory contains all of your service providers. Service providers load your application by adding services to the service container. Service providers also register events.
Above are the 5 default folders laravel comes with. But with the use
php artisan make:command, user can create other folders too.
Bootstrap directory has
app.php file that loads the framework. This folder also have cache directory which holds framework generated cache files.
Config directory holds all the configuration files.
Public directory contains the
Routes directory contains all routes definition of your application. By default laravel comes with 4 route files which are
api.php, web.php, console.php and
- Web.php: This file have all the route which are associated with web. All web routes pass through web middleware that provides CSRF protection, cookie, session and encryption.
- Api.php: This file contain stateless routes which means these routes don’t have any csrf or session protection. These routes are intended to authenticate via tokens.
- Console.php: This file used to hold closure based console command.
- Channels.php: This file is used to register event broadcasting channels.
Storage directory contains logs, compiled blade templates, file caches, and file based sessions. All of your public accessible files like profile image and other media will also place in
storage/app/public directory. It is recommended by laravel that you should create a symbolic link at
public/storage which points to
storage/app/public directory. Symbolic link can be created using
php artisan storage:link command.
Tests Directory contains your application test code like PHPUnit. Each test class must be suffixed with the word Test. You can use
php vendor/bin/phpunit command to run tests. Laravel also provides artisan command to run test which is php artisan test.
This directory contains Composer dependencies.
- .env: This file holds the configuration settings of your laravel app. Laravel uses env() function to get .env file values.
- Artisan.php: This file loads the composer dependencies and bootstrap laravel application.
- Phpunit.xml: This file holds the environment variables for php unit.
- Server.php: This file is used to emulate Apache’s ‘mod_rewrite’ functionality from the built-in PHP web server
- Composer.json: This file holds the dependencies of current laravel project and may contain other metadata as well.
- Composer.lock: This file has exact version of dependencies which are saved in composer.json file.