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 database
folder contains your database migration and
seeds.
The public
directory contains the front controller and
your assets (images, JavaScript, CSS, etc.).
The resources
directory contains your views, raw assets
(LESS, SASS, CoffeeScript), and "language" 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 thephp 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:
php artisan app:name SocialNet