## OLAS

[Laravel 4.2 Docs](https://laravel.com/docs/4.2)

[Laravel 4.2 API](https://devdocs.io/laravel~4.2/)

[Learn Laravel](https://laracasts.com/series/laravel-from-scratch-2018)

### Setup

Server requirements: 
- PHP 7.1 with [Composer](https://getcomposer.org/download/)
- MCrypt PHP Extension

Run `composer install` in the project's root directory.

Run the application with `php artisan serve` or see the next section to run in an Apache server.

#### Apache

Create a virtualhost with the following settings:
```
DocumentRoot $PATH_TO_PROJECT_ROOT/public
<Directory $PATH_TO_PROJECT_ROOT/public>
    AllowOverride All
    Require all granted
</Directory>
```

### Configuration

Copy [`.env.php.sample`](.env.php.sample) to `.env.php` and replace with correct settings.

Other options can be set in `app/config`.

#### Environments
The environment determines which configuration files will be used. 
Configuration options for each environment can be set in `app/config/$ENV`. 
Options within files in this directory overwrite those in `app/config` with the same file name.

By default the application will use the `local` environment unless it's running with a **.edu** domain. This can be changed in [`bootstrap/start.php`](bootstrap/start.php) and more environments can be added here.

### Routes

Routes tell the application to which controller the request will be sent or which view will be displayed.

All routes must be registered in [`app/routes.php`](app/routes.php).

### Migrations
Migrations are used to create the database and make any changes to the schema.

Migrations are found in `app/database/migrations` and can be generated with 
`php artisan generate:migration $MIGRATION_NAME`. 

Each migration has an *up* function that performs the migration and a *down* function that reverses it.

### Views

Views are the HTML structure for each page or section of a page. They use the blade templating engine.

Views are found in `app/views`.

### Controllers

Controllers handle requests and can return a View, Model, or some other data. They are found in `app/controllers` and usually correspond to a specific Model. 

Controllers are in charge of preparing any data that might be necessary for a View, or it might create or update new entries for a Model.

Data can be sent to a View in an array of variables.