Skip to content

Instantly share code, notes, and snippets.

@OlivierParent
Last active August 29, 2015 14:16
Show Gist options
  • Save OlivierParent/3b79c126cbb2da141292 to your computer and use it in GitHub Desktop.
Save OlivierParent/3b79c126cbb2da141292 to your computer and use it in GitHub Desktop.
Laravel.md

NMDAD II — Laravel 5

NMDAD II Informatie
Onderwerp Laravel 5
Opleidingsonderdeel New Media Design & Development II
Academiejaar 2014-2015
Docent Olivier Parent
Instelling Arteveldehogeschool
Opleiding Bachelor in de grafische en digitale media
Afstudeerrichting Multimediaproductie
Keuzeoptie proDEV

[TOC]


I. Inleiding

1. Wat is Laravel?

Laravel The PHP Framework For Web Artisans

Laravel is een PHP-framework voor RAD dat ontwikkeld werd door Taylor Otwell, een voormalig .NET-ontwikkelaar.

Laravel probeert het wiel niet opnieuw uit te vinden, maar inspireerd zich op de andere frameworks. En niet enkel PHP-frameworks, maar ook onder andere Microsoft .NET en Ruby on Rails. Het maakt daarenboven gebruik van Symfony-componenten.

Symfony
Symfony is het populairste enterprise-level PHP-framework. Naast een framework is het ook een verzameling van losse componenten die in ander projecten gebruikt kunnen worden. Een lijst van projecten die Symfony-componenten gebruiken vind je hier.

2. Waarom een framework?

Webprojecten zijn ondertussen zo complex geworden dat je als individuele ontwikkelaar geen tijd meer hebt om het wiel opnieuw uit te vinden.

Een framework biedt oplossingen voor heel wat courante problemen waarmee je als webontwikkelaar geconfronteerd wordt. Door een framework te gebruiken kan je je als ontwikkelaar focussen op de opdracht in plaats van de technologie.

Andere voordelen:

  • Goed getest doordat automatische tests gebruikt worden en doordat het al in veel projecten gebruikt werd.
  • Goed gedocumenteerd.
  • Dwingt een zekere mate van structuur en uniformiteit af. Dit faciliteert het samenwerken met andere ontwikkelaars.
  • Eenvoudige updates en onderhoud van de applicatie.

3. Waarom Laravel?

3.1 Volwassen

Het is een volwassen framework, want het is al in ontwikkeling sinds 2011. Ondertussen zitten we al aan de 5 generatie. Sinds versie 4 is Laravel gebaseerd op Symfony-componenten en volgt de Laravel-roadmap de Symfony-roadmap, waardoor er na elke Symfony-release ook een Laravel-release volgt.

3.2 Up-and-coming

  • Nieuwste generatie RAD-frameworks.
  • Meeste stars en forks van alle PHP-projecten op GitHub (maart 2015).

3.3 State-of-the-Art

  • PHP 5.4+ (sinds Laravel 4.1).
  • Lid van PHP Framework Interop Group
  • Past de geldende best practices toe:
    • Architectural Pattern: MVC
    • Design Patterns: Decorator, Observer, Dispatcher, Singleton, Iterator, Facade, Dependency Injection …

PHP Framework Interop Group
PHP-FIG is een organisatie waar bijna elk PHP-project van betekenis lid van is. Deze organisatie draagt bij tot de professionalisering van de PHP-community door de samewerking tussen de leden in de hand te werken. Ze doet dit door [standaarden][php-fig-standards] af te spreken.

http://laravel.com/api/5.0/index.html

II. Installatie en configuratie

1. Ontwikkelomgeving

1.1 Installatie

Zie Artevelde Laravel Homestead voor instructies.

1.2 Update

Update Composer op het hostbesturingssysteem.

$ composer self-update

Start Artevelde Laravel Homestead

$ artestead up

Log in op de Virtual Machine (Ubuntu Server) via SSH

$ artestead ssh
vagrant@homestead$ _

2. Composer (op Artevelde Laravel Homestead)

2.1 Composer updaten

In Laravel Homestead kan composer enkel via sudo (Super User Do) geüpdatet worden.

vagrant@homestead$ sudo composer self-update

2.2 Laravel Installer installeren

Composer kan paketten globaal installeren zodat ze doorheen het besturingssysteem aangesproken kunnen worden.

$ composer global require laravel/installer

Opmerking: composer global installeert in de map ~/.composer

Je kan globaal geïnstalleerde packages updaten met:

$ composer global update

3. Project

3.1 De projectmap aanmaken

vagrant@homestead$ mkdir -p ~/Code/nmdad2.arteveldehogeschool.local

vagrant@homestead$ cd ~/Code/nmdad2.arteveldehogeschool.local/

3.2 Nieuw project aanmaken met Laravel Installer

vagrant@homestead$ laravel new www

⚠️ Tip Laravel wordt heel regelmatig geüpdatet. Updaten van je projectcode doe je met composer update.

vagrant@homestead$ cd ~/Code/nmdad2.arteveldehogeschool.local/www/
vagrant@homestead$ composer update

3.3 Node-paketten installeren

Blijf in het hostbesturingssysteem, zeker op Windows!

$ cd ~/Code/nmdad2.arteveldehogeschool.local/www/
$ npm install

Dit installeert Gulp en Laravel Elixir, een een wrapperapplicatie voor Gulp die het process nog wat zou moeten vereenvoudigen.

3.4 Bower Configuratie

Laravel Elixir verwacht dat bower paketten in de map "./vendor/bower_components/ staat. Dit moeten we instellen in het Bower Run Commands-bestand (.bowerrc).

vagrant@homestead$ cd ~/Code/nmdad2.arteveldehogeschool.local/www/

Bestand aanmaken

vagrant@homestead$ touch .bowerrc

Toevoegen aan het Git-repository

vagrant@homestead$ git add .bowerrc

Bewerken met nano (of een andere editor).

vagrant@homestead$ nano .bowerrc
{
    "directory": "./vendor/bower_components"
}

3.5 Database

⚠️ Tips voor Shell Scripts

Mac OS X
Gebruik chmod (Change Mode) om de scripts uitvoerbaar te maken.

vagrant@homestead$ chmod +x *.sh

Windows
Gebruik dos2unix zodat de bestanden niet langer in DOS-formaat (Windows), maar in Unix-formaat (Linux). In DOS-formaat zijn de bestanden niet uitvoerbaar.

vagrant@homestead$ dos2unix .settings *.sh

Bestanden en mappen

nmdad2.arteveldehogeschool.local/
├── www/
|   └── database/
|       ├── .settings
|       ├── backup.sh
|       ├── drop.sh
|       ├── init.sh
|       ├── reset.sh
|       └── restore.sh
└── README.md
3.5.1 Instellingen

Het bestand database/.settings:

APP=nmdad2

DB_NAME=${APP}_arteveldehogeschool_be
DB_USER=${APP}_db_user
DB_PASS=${APP}_db_password
DB_DUMP=`dirname $0`/dumps
3.5.2 Initialisatie

Het bestand database/init.sh:

#!/usr/bin/env bash

source `dirname $0`/.settings
MYSQL_PWD=secret   mysql --user=homestead --execute="GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER' IDENTIFIED BY '$DB_PASS'"
MYSQL_PWD=$DB_PASS mysql --user=$DB_USER  --execute="CREATE DATABASE IF NOT EXISTS $DB_NAME CHARACTER SET utf8 COLLATE utf8_general_ci"
echo Database \`$DB_NAME\` initalized!
3.5.3 Verwijderen

Het bestand database/drop.sh:

#!/usr/bin/env bash

source `dirname $0`/.settings
MYSQL_PWD=$DB_PASS mysql --user=$DB_USER --execute="DROP DATABASE IF EXISTS $DB_NAME"
echo Database \`$DB_NAME\` dropped!
3.5.3 Reset

Het bestand database/reset.sh:

#!/usr/bin/env bash

`dirname $0`/drop.sh
`dirname $0`/init.sh
3.5.4 Backup

Het bestand database/backup.sh:

#!/usr/bin/env bash

source `dirname $0`/.settings
mkdir --parents $DB_DUMP
MYSQL_PWD=$DB_PASS mysqldump --user=$DB_USER --databases $DB_NAME > $DB_DUMP/latest.sql
gzip -cr $DB_DUMP/latest.sql > $DB_DUMP/$(date +"%Y-%m-%d_%H%M%S").sql.gz
echo Backup for database \`$DB_NAME\` stored!
3.5.5 Restore

Het bestand database/restore.sh:

#!/usr/bin/env bash

`dirname $0`/init.sh
source `dirname $0`/.settings
MYSQL_PWD=$DB_PASS mysql --user=$DB_USER $DB_NAME < $DB_DUMP/latest.sql
echo Backup for database \`$DB_NAME\` restored!

3.6 Laravel Configuratie

3.6.1 Configuratiebestanden

De configuratiebestanden staan in de map ./app/config/

3.6.2 Environment

Een deel van de configuratiegegevens komt uit de environment. Tijdens de installatie wordt er een .env bestand gemaakt. Indien dit nog niet zo is kan je het bestand .env.example kopiëren.

vagrant@homestead$ cp .env.example .env

Het bestand .env ziet er bijvoorbeeld zo uit:

APP_ENV=local
APP_DEBUG=true
APP_KEY=SomeRandomString

DB_HOST=localhost
DB_DATABASE=nmdad2_arteveldehogeschool_be
DB_USERNAME=nmdad2_db_user
DB_PASSWORD=nmdad2_db_password

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null

⚠️ OPGELET
Een veel gemaakte fout en een groot beveiligingsrisico is dat een wachtwoord (per ongeluk) in een publiek versiebeheerrepository terecht komt. Het bestand .env is daarom uitgesloten van versiebeheer en zal dus nooit in het Git-repository bewaard worden. Bewaar deze gegevens daarom zorgvuldig op een veilige plaats.

⚠️ Tip
Indien de gegevens niet geheim hoeven te zijn, zoals bijvoorbeeld de wachtwoorden van een locale ontwikkelingsomgeving, kan je ze eventueel in .env.example bewaren.

3.7 Artisan

3.7.1 Instellen

Artisan is de command-line tool voor Laravel.

vagrant@homestead$ cd ~/Code/nmdad2.arteveldehogeschool.local/www/
vagrant@homestead$ php artisan

Om niet telkens php te moeten typen kunnen we met chmod (Change Mode) het bestand rechten geven om uit te voeren met +x (eXecute).

vagrant@homestead$ chmod +x artisan

We moeten wel nog altijd ./ voor de applicatie zetten omdat Linux omwille van veiligheidsredenen niet zoekt naar uitvoerbare bestanden in de huidige map.

vagrant@homestead$ ./artisan

De versie van Laravel tonen:

vagrant@homestead$ ./artisan --version

⚠️ Tip
De scaffolding verwijderen (voorbeeldregistratie en -login):

vagrant@homestead$ ./artisan fresh

3.7.2 PhpStorm Instellen
a. PHP local interpreter instellen

PhpStormPreferences…Languages & FrameworksPHP

  • PHP language level: 5.6
  • Interpreter:

Interpreters+Select Interpreter Path: Other Local…

  • Name: PHP 5.6
  • PHP executable: /usr/local/bin/php

PhpStormPreferences…ToolsCommand Line Tool Support+

Command Line Tools

  • Choose tool: Tool based on Symfony Console
  • Visibility: project

Tool Settings

  • Alias: artisan
  • Path to PHP executable: /usr/local/bin/php
  • Path to script: ~/Code/nmdad2.arteveldehogeschool.local/www/artisan

⚠️ OPGELET
Vanuit je hostbesturingssysteem (Mac OS X of Windows) kan je via Artisan niet aan de database op je guestbesturingssysteem (Ubuntu Server).

Opdrachten zoals deze zullen niet werken:

$ ./artisan migrate 
$ ./artisan db:seed
3.7.3 Application Namespace

Deze is standaard ingesteld op App en dat mag zo blijven, maar we gaan de naamruimte veranderen in Artevelde

vagrant@homestead$ ./artisan app:name Artevelde 
3.7.4 Application Key genereren

Hashcodes moeten gebaseerd zijn op een sleutel die uniek is voor deze applicatie zodat hackers geen Rainbow Tables kunnen gebruiken.

Je kan die code zelf ingeven, maar het is makkelijker op die via Artisan te laten genereren.

vagrant@homestead$ ./artisan key:generate

Dit zal de standaardsleutel (SomeSecretCode) in .env vervangen door een echte unieke sleutel, specifiek voor deze applicatie.

3.8 Laravel Debugbar

De Laravel Debugbar is een uitbreiding op de PHP Debug Bar.

3.8.1 Pre-installatie
vagrant@homestead$ cd ~/Code/nmdad2.arteveldehogeschool.local/www/
vagrant@homestead$ sudo composer self-update
vagrant@homestead$ composer update
3.8.2 Installatie
vagrant@homestead$ composer require barryvdh/laravel-debugbar

www/config/app.php

// …
	'providers' => [

        // …

        /*
		 * Composer Installed Service Providers...
		 */
		'Barryvdh\Debugbar\ServiceProvider',
        
        // …

	],

// …

    'aliases' => [
        
        // …
        
		/*
 		 * Composer Installed Facades...
 		 */
		'Debugbar'  => 'Barryvdh\Debugbar\Facade',

	],

// …
3.8.3 Postinstallatie
vagrant@homestead$ ./artisan vendor:publish

III. Framework gebruiken

Front-End

Bower

⚠️ Tip
Laravel Elixir gaat er van uit dat de Bower componenten in www/vendor/bower_components staat.

vagrant@homestead$ bower init

vagrant@homestead$ bower install --save angular angular-aria angular-cookies angular-material angular-messages angular-resource angular-route angular-sanitize angular-touch

vagrant@homestead$ bower install --save chartjs fontawesome leaflet

Gulp

Gulp notify fouten vermijden door de notifier uit te schakelen

vagrant@homestead$ export DISABLE_NOTIFIER=true

⚠️ Tip
Voeg de export toe aan aan de Bourne-Again SHell Run Commands (~/.bashrc) door deze opdrachten eenmalig uit te voeren:

vagrant@homestead$ echo export DISABLE_NOTIFIER=true >> ~/.bashrc
vagrant@homestead$ source ~/.bashrc
$ npm install
$ npm install -g gulp

$ gulp

Met minification

$ gulp --production

Back-End

vagrant@homestead$ ./artisan app:name Nmdad2

Models, Migrations en Seeds

Database
Intro
  • Model
    Een klasse die een database-entity voorstelt en die moet overeenkomen met een tabel in de database.
  • Migration
    Een klasse die de definitie van een tabel of de wijzigingen aan de tabel in de database bevat. Voert SQL DDL uit.
  • Seed Inhoud in de vorm van model-instanties waarmee een tabel opgevuld kan worden. Voert SQL DML uit.

De eigenschappen van het model hangen af van de databasetabel en deze is gedefinieerd in een Migration.

Models

vagrant@homestead$ ./artisan make:model Administrator
vagrant@homestead$ ./artisan make:migration create_administrators_table --create=administrators

vagrant@homestead$ ./artisan make:model Settings
vagrant@homestead$ ./artisan make:migration create_settings_table --create=settings

vagrant@homestead$ ./artisan make:model Country
vagrant@homestead$ ./artisan make:migration create_countries_table --create=countries

vagrant@homestead$ ./artisan make:model Region
vagrant@homestead$ ./artisan make:migration create_regions_table --create=regions

vagrant@homestead$ ./artisan make:model Locality
vagrant@homestead$ ./artisan make:migration create_localities_table --create=localities

vagrant@homestead$ ./artisan make:model Address
vagrant@homestead$ ./artisan make:migration create_addresses_table --create=addresses

vagrant@homestead$ ./artisan make:model GoalList
vagrant@homestead$ ./artisan make:migration create_goal_lists_table --create=goal_lists

vagrant@homestead$ ./artisan make:model Goal
vagrant@homestead$ ./artisan make:migration create_goals_table --create=goals

vagrant@homestead$ ./artisan migrate

⚠️ Tip
Als een klasse niet gevonden wordt, probeer dan een van deze stappen:

vagrant@homestead$ ./artisan optimize

vagrant@homestead$ ./artisan clear-compiled

vagrant@homestead$ composer dump-autoload

Seeds

⚠️ Tip
Voer eerst ./artisan optimize uit om de nieuwe seeder klasses te laden.

Na een migrate kan een seed uitgevoerd worden om de databasetabellen op te vullen (to populate) .

vagrant@homestead$ ./artisan db:seed

Je kan ook onmiddellijk seeden tijdens een migrate.

vagrant@homestead$ ./artisan migrate --seed

Events

www/app/Providers/EventServiceProvider.php

vagrant@homestead$ ./artisan optimize

⚠️ Tip
Als Artisan niet meer werkt: rm storage/framework/compiled.php

Wachtwoord Hashen

⚠️ Tip
Test met ./artisan tinker (exit om af te sluiten)

$passwordRaw = 'nmdad2';

$passwordHashed = Hash::make($passwordRaw);

Hash::check($passwordRaw, $passwordHashed);

Hash automatisch bij een Model::creating event

Routes

app/Http/routes.php

vagrant@homestead$ ./artisan route:list

Views

Geïnstalleerd in www/vendor/illuminate/html/

www/config/app.php

// …
	'providers' => [

        // …

		/*
		 * Composer Installed Service Providers...
		 */
		'Illuminate\Html\HtmlServiceProvider',
        
        // …

	],

// …

    'aliases' => [
        
        // …
        
        /*
 		 * Composer Installed Facades...
 		 */
		'Form'      => 'Illuminate\Html\FormFacade',
		'Html'      => 'Illuminate\Html\HtmlFacade',

	],

// …
{!! Html::style() !!}
{!! Html::script() !!}

Carbon

Zie ook

Carbon is een PHP-bibliotheek voor tijd en datums die een uitbreiding vormt op de standaar PHP-klasse DateTime. Deze bibliotheek is standaard geïntegreerd in Laravel.

Gebruik in Laravel:

Carbon\Carbon::now()->year

Of

use Carbon\Carbon;

// …

    Carbon::now()->year

Faker

Zie ook

Faker is een PHP-biliotheek van Francois Zaninotto om dummy data te generen.

Installeer Faker als require-dev. Faker is enkel nodig in de ontwikkelomgeving, want in de productieomgeving willen we enkel echte gegevens.

$ cd ~/Code/mma.arteveldehogeschool.local/www/
$ sudo composer self-update
$ composer update
$ composer require -dev fzaninotto/faker

In PHP:

<?php

// Boven de klassedefinitie
use Faker\Factory as Faker;


// In de klasse
$faker = Faker::create();

Unit Testing

PHPUnit

vagrant@homestead$ sudo composer self-update
vagrant@homestead$ composer global require phpunit/phpunit
vagrant@homestead$ cd ~/Code/nmdad2.arteveldehogeschool.local/www/
vagrant@homestead$ phpunit
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment