Application Structure

Introduction

The default Laravel application structure is intended to provide a great starting point for both large and small applications. Of course, you are free to organize your application however you like. Laravel imposes almost no restrictions on where any given class is located - as long as Composer can autoload the class.

The Root Directory

The root directory of a fresh Laravel installation contains a variety of folders:

The app directory, as you might expect, contains the core code of your application. We'll explore this folder in more detail soon.

The bootstrap folder contains a few files that bootstrap the framework and configure autoloading.

The config directory, as the name implies, contains all of your application's configuration files.

The storage directory contains compiled Blade templates, file based sessions, file caches, and other files generated by the framework.

The tests directory contains your automated tests.

The vendor directory contains your Composer dependencies.

The App Directory

The "meat" of your application lives in the app directory. By default, this directory is namespaced under App and is autoloaded by Composer using the PSR-4 autoloading standard. You may change this namespace using the app:name Artisan command.

The app directory ships with a variety of additional directories such as Console, Http, and Providers. Think of the Console and Http directories as providing an API into the "core" of your application. The HTTP protocol and CLI are both mechanisms to interact with your application, but do not actually contain application logic. In other words, they are simply two ways of issuing commands to your application. The Console directory contains all of your Artisan commands, while the Http directory contains your controllers, filters, and requests.

The Commands directory, of course, houses the commands for your application. Commands represent jobs that can be queued by your application, as well as tasks that you can run synchronously within the current request lifecycle.

The Events directory, as you might expect, houses event classes. Of course, using classes to represent events is not required; however, if you choose to use them, this directory is the default location they will be created by the Artisan command line.

The Handlers directory contains the handler classes for both commands and events. Handlers receive a command or event and perform logic in response to that command or event being fired.

The Services directory contains various "helper" services your application needs to function. For example, the Registrar service included with Laravel is responsible for validating and creating new users of your application. Other examples might be services to interact with external APIs, metrics systems, or even services that aggregate data from your own application.

The Exceptions directory contains your application's exception handler and is also a good place to stick any exceptions thrown by your application.

Note: Many of the classes in the app directory can be generated by Artisan via commands. To review the available commands, run the php artisan list make command in your terminal.

Namespacing Your Application

As discussed above, the default application namespace is App; however, you may change this namespace to match the name of your application, which is easily done via the app:name Artisan command. For example, if your application is named "SocialNet", you would run the following command: