- Learn
- PHP e Google Cloud Platform, la guida
- PHP e MySQL su Google Cloud Platform
PHP e MySQL su Google Cloud Platform
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 PHP inserisci la tua email nel box qui sotto:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
La tua iscrizione è andata a buon fine. Se vuoi ricevere informazioni personalizzate compila anche i seguenti campi opzionali:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
I Video di HTML.it
Per me il futuro è ora! #dilloalfuturo
Il futuro è una incognita, da quello che ho visto oggi, per me il futuro è oggi