Architechture
Model View Controller¶
Laravel is built upon MVC, by default Laravel uses Eloquent
for the model business layer which uses the Active Record Pattern.
In Projects2
, Doctrine is used as a drop in replacement instead, this is possible with the Laravel Doctrine package.
http://www.doctrine-project.org/ http://www.laraveldoctrine.org/
All models are located in namespace App\Entities
All controllers are located in namespace App\Http\Controllers
All views are located in the directory resources/views
Explicit Model Binding¶
In the majority of the application, models are injected in to the controllers by looking at the routes.
The route may have an ID which is specified in the routes/web.php
file, this is then resolved for the controller to use without having to manually fetch the entity every time.
The logic to fetch this is defined explicitly, new entities will need adding to the definition in:
App\Providers\RouteServiceProvider
Service Classes¶
All application logic should be kept within the many service classes to reduce code duplication and make the code base more maintainable.
Services are located in App\Services
Repositories¶
Doctrine by default uses repositories, all entities have a repository, even if they don't have any exclusive functionality.
All entity respositories are sub classes of the App\Repositories\EntityRepository
which extends the base Doctrine repository class.
Blade Templates and Theme¶
All of the primary pages inherit the functionality and styling from the main theme template.
The template is located in resources/views/theme/master.blade.php
PDF and Mailables¶
PDFs are generated usking Webkit Html to PDF (WKHTMLTOPDF).