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 directories:
app directory, as you might expect, contains the
core code of your application. We'll explore this directory in more
bootstrap directory contains a few files that
bootstrap the framework and configure autoloading, as well as a
cache directory that contains a few framework generated
files for bootstrap performance optimization.
config directory, as the name implies, contains all
of your application's configuration files.
database directory contains your database migration
and seeds. If you wish, you may also use this directory to hold an
public directory contains the front controller and
resources directory contains your views, raw assets
(LESS, SASS, CoffeeScript), and localization files.
storage directory contains compiled Blade templates,
file based sessions, file caches, and other files generated by the
framework. This directory is segregated into
logs directories. The
app directory may be used to store any files utilized by
your application. The
framework directory is used to store
framework generated files and caches. Finally, the
directory contains your application's log files.
tests directory contains your automated tests. An
example PHPUnit is provided out of the
vendor directory contains your Composer dependencies.
The App Directory
The "meat" of your application lives in the
directory. By default, this directory is namespaced under
App and is autoloaded by Composer using the PSR-4 autoloading
app directory ships with a variety of additional
directories such as
Providers. Think of the
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, middleware, and requests.
Events directory, as you might expect, houses event classes. Events may be used to alert other
parts of your application that a given action has occurred, providing a
great deal of flexibility and decoupling.
Exceptions directory contains your application's
exception handler and is also a good place to stick any exceptions
thrown by your application.
Jobs directory, of course, houses the queueable jobs for your application. Jobs may be
queued by your application or run synchronously within the current
Listeners directory contains the handler classes for
your events. Handlers receive an event and perform logic in response to
the event being fired. For example, a
might be handled by a
Policies directory contains the authorization policy
classes for your application. Policies are used to determine if a user
can perform a given action against a resource. For more information,
check out the authorization
Note: Many of the classes in the
appdirectory can be generated by Artisan via commands. To review the available commands, run the
php artisan list makecommand in your terminal.