1
0

Applicatiebasis, incl. instructie

This commit is contained in:
Christiaan Goossens 2017-02-18 19:49:26 +01:00
parent 88a8546ef2
commit da5ecf6f86
8 changed files with 211 additions and 43 deletions

View File

@ -9,6 +9,8 @@
},
"scripts": {
"start": "php -S 0.0.0.0:8080 -t public public/index.php"
},
"autoload": {
"psr-4": {"InfD4p\\": "src/"}
}
}

63
composer.lock generated
View File

@ -8,18 +8,21 @@
"packages": [
{
"name": "container-interop/container-interop",
"version": "1.1.0",
"version": "1.2.0",
"source": {
"type": "git",
"url": "https://github.com/container-interop/container-interop.git",
"reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e"
"reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e",
"reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e",
"url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8",
"reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8",
"shasum": ""
},
"require": {
"psr/container": "^1.0"
},
"type": "library",
"autoload": {
"psr-4": {
@ -31,7 +34,8 @@
"MIT"
],
"description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
"time": "2014-12-30T15:22:37+00:00"
"homepage": "https://github.com/container-interop/container-interop",
"time": "2017-02-14T19:40:03+00:00"
},
{
"name": "nikic/fast-route",
@ -122,6 +126,55 @@
],
"time": "2015-09-11T15:10:35+00:00"
},
{
"name": "psr/container",
"version": "1.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/container.git",
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Container\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common Container Interface (PHP FIG PSR-11)",
"homepage": "https://github.com/php-fig/container",
"keywords": [
"PSR-11",
"container",
"container-interface",
"container-interop",
"psr"
],
"time": "2017-02-14T16:28:37+00:00"
},
{
"name": "psr/http-message",
"version": "1.0.1",

View File

@ -1,4 +1,21 @@
<?php
/**
* Informatica Eindproject D4p
* 6in3, Stedelijk Gymnasium Nijmegen
* Docent: Hans de Wolf
*
* ==================
*
* Daniel Boutros,
* Christiaan Goossens,
* Jelmer Hinssen
*/
/**
* Check if the script is running in CLI mode
*/
if (PHP_SAPI == 'cli-server') {
// To help the built-in PHP dev server, check if the request was actually for
// something which should probably be served as a static file
@ -9,22 +26,13 @@ if (PHP_SAPI == 'cli-server') {
}
}
/**
* Require the Composer autoloader to load dependencies
*/
require __DIR__ . '/../vendor/autoload.php';
session_start();
/**
* Load the bootstrapping script
*/
// Instantiate the app
$settings = require __DIR__ . '/../src/settings.php';
$app = new \Slim\App($settings);
// Set up dependencies
require __DIR__ . '/../src/dependencies.php';
// Register middleware
require __DIR__ . '/../src/middleware.php';
// Register routes
require __DIR__ . '/../src/routes.php';
// Run app
$app->run();
include __DIR__ . '/../src/bootstrap.php';

38
src/Application/Main.php Normal file
View File

@ -0,0 +1,38 @@
<?php
/**
* Informatica Eindproject D4p
* 6in3, Stedelijk Gymnasium Nijmegen
* Docent: Hans de Wolf
*
* ==================
*
* Daniel Boutros,
* Christiaan Goossens,
* Jelmer Hinssen
*/
namespace InfD4p\Application;
use \Slim\App;
class Main {
/**
* Constructor function
* @param App $app App Dependency Injection
*
* ==============
* INSTRUCTIEBLOK
* ==============
*
* Hier wordt onze applicatie gestart. De functie hieronder wordt aangeroepen bij het starten van de app. Hier kun je dus routes toevoegen.
*
*/
public function __construct(App $app) {
$app->get('/[{name}]', function ($request, $response, $args) {
// Render index view
return $this->renderer->render($response, 'index.phtml', $args);
});
}
}

88
src/bootstrap.php Normal file
View File

@ -0,0 +1,88 @@
<?php
/**
* Informatica Eindproject D4p
* 6in3, Stedelijk Gymnasium Nijmegen
* Docent: Hans de Wolf
*
* ==================
*
* Daniel Boutros,
* Christiaan Goossens,
* Jelmer Hinssen
*/
/**
* BOOTSTRAPPING SCRIPT
*/
// Get the Slim framework settings
$settings = require __DIR__ . '/settings.php';
// Create the Slim application object with the settings
/**
* ==============
* INSTRUCTIEBLOK
* ==============
*
* Slim Framework (https://www.slimframework.com/) is een basisframework om routing in PHP gemakkelijker te maken. Je kunt via functies van het Slim\App object verschillende routes aanmaken en daar PHP code aan koppelen. Slim zorgt er dan voor dat je daar automatisch uitkomt als je de opgegeven URL intypt in je browser.
*
* Slim maakt het ook makkelijker om benodigdheden voor je applicatie (dependencies) op een goede (standaardengebaseerde) manier te koppelen. Dit gebeurt bijvoorbeeld hieronder. Slim gebruikt hiervoor een container (http://php-di.org/doc/understanding-di.html)
*
*/
$app = new \Slim\App($settings);
/**
* Setup dependencies
*/
$container = $app->getContainer();
// Create the view renderer
/**
* ==============
* INSTRUCTIEBLOK
* ==============
*
* Hier wordt de 'view renderer' aan de dependency container (zie hierboven) toegevoegd. Dit zorgt dat je in je applicatie deze 'view renderer' kunt gebruiken via `$this->renderer`.
* De renderer wordt gebruikt om een PHP template (https://en.wikipedia.org/wiki/Web_template_system) aan je URL te koppelen.
*
* Dit kun je doen in je 'route' (URL) met de volgende code:
*
* ```
* return $this->renderer->render($response, 'index.phtml', $args);
* ```
*
* (index.phtml kan hier vervangen worden door een template adres uit de map templates)
*/
$container['renderer'] = function ($c) {
$settings = $c->get('settings')['renderer'];
return new Slim\Views\PhpRenderer($settings['template_path']);
};
// Inject the application main class
/**
* ==============
* INSTRUCTIEBLOK
* ==============
*
* Hieronder wordt de Main class van onze applicatie aangeroepen.
*
* In object georiënteerd PHP is een applicatie vaak gestructureerd in meerdere 'classes', die ook wel objecten worden genoemd. Een object kan worden gemaakt door het volgende:
*
*/
new InfD4p\Application\Main($app);
/**
* Bij het maken van dit object is in de class de __construct functie aangeroepen met de parameter $app. De functies die daar in staan zullen nu worden uitgevoerd.
*
* Je kunt de class herkennen uit talen als Java en C(++ of #), omdat ze daar ook worden gebruikt.
*
* Je kunt voor een beter begrip de volgende sites lezen:
* - https://www.sitepoint.com/php-53-namespaces-basics/ (over namespaces (wij gebruiken InfD4p\Application))
* - http://php.net/manual/en/language.oop5.basic.php (over de class)
*/
// Run app
$app->run();

View File

@ -1,10 +0,0 @@
<?php
// DIC configuration
$container = $app->getContainer();
// view renderer
$container['renderer'] = function ($c) {
$settings = $c->get('settings')['renderer'];
return new Slim\Views\PhpRenderer($settings['template_path']);
};

View File

@ -1,4 +0,0 @@
<?php
// Application middleware
// e.g: $app->add(new \Slim\Csrf\Guard);

View File

@ -1,7 +0,0 @@
<?php
// Routes
$app->get('/[{name}]', function ($request, $response, $args) {
// Render index view
return $this->renderer->render($response, 'index.phtml', $args);
});