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