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.
inserisci la tua e-mail nel box qui sotto: