Per velocizzare il nostro test useremo alcune dipendenze che andiamo ad installare tramite Composer, il file composer.json sarà questo:
{
"require": {
"silex/silex": "^1.3",
"symfony/twig-bridge": "~2.7|3.0.*",
"twig/twig": "~1.8|~2.0"
},
"require-dev": {
"symfony/browser-kit": "^3.0",
"phpunit/phpunit": "~4"
}
}
Nel nostro progetto comparirà una cartella vendor con una serie di librerie caricate. In particolare stiamo usando Silex un micro-framework basato su Symfony e Twig come template engine. Per lo sviluppo locale abbiamo necessità di avere un database MySQL identico a quello creato nel Cloud.
Quindi come primo passaggio creiamo un file app.yaml praticamente identico a quelli precedentemente commentati:
runtime: php55
api_version: 1
threadsafe: true
handlers:
- url: /.*
script: index.php
Il primo file da caricare sarà index.php:
require __DIR__ . '/vendor/autoload.php';
$app = require __DIR__ . '/app.php';
$app['debug'] = true;
$app->run();
Questo file esegue il bootstrap del nostro framework e carica il file app.php:
use Silex\Application;
use Silex\Provider\TwigServiceProvider;
use Symfony\Component\HttpFoundation\Request;
$app = new Application();
$app->register(new TwigServiceProvider());
$app['twig.path'] = [ __DIR__ ];
Creiamo la nostra applicazione e impostiamo le informazioni necessarie per la gestione del template engine.
Impostiamo la connessione al database:
$app['database'] = function () use ($app) {
$dsn = 'mysql:host=127.0.0.1;port=3306;dbname=note;';
$user = 'root';
$password = '';
$db = new PDO($dsn, $user, $password);
return $db;
};
Attenzione a $dsn, $user e $password, questa configurazione è valida per l'ambiente locale, prima del deploy le informazioni andranno aggiornate con i dati reali del Cloud.
Di seguito la visualizzazione delle note inserite nel database:
$app->get('/', function () use ($app) {
$db = $app['database'];
$twig = $app['twig'];
$results = $db->query('SELECT * FROM mienote');
return $twig->render('cloudsql.html.twig', [
'results' => $results,
]);
});
Intercettiamo le chiamate in GET, connettiamoci al database, eseguiamo una semplice SELECT e andiamo a inviare i dati al template. La visualizzazione delle informazioni sarà piuttosto spartana:
{% if results %}
<h2>Note inserite</h2>
{% for row in results %}
<div><strong> {{ row.nome }} </strong> {{ row.contenuto }}</div>
{% endfor %}
{% endif %}
Un ciclo for stamperà i risultati (se esistono).
Nel template inseriamo anche un form per aggiungere note al nostro database:
<h2>Scrivi una nota</h2>
<form action="/" method="post">
<div><label for="nome">Nome:</label><br><input name="nome" id="nome" /></div>
<div><textarea name="contenuto" rows="3" cols="60"></textarea></div>
<div><input type="submit" value="Vai"></div>
</form>
Il form eseguirà un invio a se stesso che andremo ad intercettare nel nostro file app.php:
$app->post('/', function (Request $request) use ($app) {
$db = $app['database'];
$nome = $request->request->get('nome');
$contenuto = $request->request->get('contenuto');
if ($nome && $contenuto) {
$stmt = $db->prepare('INSERT INTO mienote (nome, contenuto) VALUES (:nome, :contenuto)');
$stmt->execute([
':nome' => $nome,
':contenuto' => $contenuto,
]);
}
return $app->redirect('/');
});
Lo switch sull'URL / avviene in base al metodo della chiamata get/post. Creo la connessione al database, leggo le variabili e poi con PDO faccio l'inserimento. Ultimo passaggio è il redirect via GET su / per vedere i risultati.
A questo punto basta lanciare l'applicazione per vederla in funzione su localhost:8080. Prima di procedere al deploy si dovranno aggiornare le variabili di connessione, una volta caricato tutto sul server si può accedere all'applicazione online.
Se vuoi aggiornamenti su Database inserisci la tua email nel box qui sotto: