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]
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.
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.
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.
- Laracasts: de officiële tutorialsite van Jeffrey Way.
- Laracon EU en Laracon US: de officiele congressen.
- Nieuwste generatie RAD-frameworks.
- Meeste stars en forks van alle PHP-projecten op GitHub (maart 2015).
- 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
Zie Artevelde Laravel Homestead voor instructies.
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$ _
In Laravel Homestead kan composer enkel via sudo
(Super User Do) geüpdatet worden.
vagrant@homestead$ sudo composer self-update
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
vagrant@homestead$ mkdir -p ~/Code/nmdad2.arteveldehogeschool.local
vagrant@homestead$ cd ~/Code/nmdad2.arteveldehogeschool.local/
vagrant@homestead$ laravel new www
⚠️ Tip Laravel wordt heel regelmatig geüpdatet. Updaten van je projectcode doe je metcomposer update
.vagrant@homestead$ cd ~/Code/nmdad2.arteveldehogeschool.local/www/ vagrant@homestead$ composer update
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.
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"
}
⚠️ Tips voor Shell ScriptsMac OS X
Gebruikchmod
(Change Mode) om de scripts uitvoerbaar te maken.vagrant@homestead$ chmod +x *.sh
Windows
Gebruikdos2unix
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
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
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!
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!
Het bestand database/reset.sh
:
#!/usr/bin/env bash
`dirname $0`/drop.sh
`dirname $0`/init.sh
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!
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!
De configuratiebestanden staan in de map ./app/config/
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.
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
PhpStorm → Preferences… → Languages & Frameworks → PHP
- PHP language level: 5.6
- Interpreter: …
Interpreters → + → Select Interpreter Path: Other Local…
- Name: PHP 5.6
- PHP executable: /usr/local/bin/php
PhpStorm → Preferences… → Tools → Command 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
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
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.
De Laravel Debugbar is een uitbreiding op de PHP Debug Bar.
vagrant@homestead$ cd ~/Code/nmdad2.arteveldehogeschool.local/www/
vagrant@homestead$ sudo composer self-update
vagrant@homestead$ composer update
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',
],
// …
vagrant@homestead$ ./artisan vendor:publish
⚠️ Tip
Laravel Elixir gaat er van uit dat de Bower componenten inwww/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 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
vagrant@homestead$ ./artisan app:name Nmdad2
- 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.
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
⚠️ 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
www/app/Providers/EventServiceProvider.php
vagrant@homestead$ ./artisan optimize
⚠️ Tip
Als Artisan niet meer werkt:rm storage/framework/compiled.php
⚠️ 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
app/Http/routes.php
vagrant@homestead$ ./artisan route:list
-
Laravel / API / Illuminate / Html /
HtmlBuilder
$ cd ~/Code/mma.arteveldehogeschool.local/www/ $ sudo composer self-update $ composer update $ composer require illuminate/html
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() !!}
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
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();
vagrant@homestead$ sudo composer self-update
vagrant@homestead$ composer global require phpunit/phpunit
vagrant@homestead$ cd ~/Code/nmdad2.arteveldehogeschool.local/www/
vagrant@homestead$ phpunit