PHP e MySQL su Google Cloud Platform

31 dicembre 2017

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.

Tutte le lezioni

1 ... 4 5 6 ... 8

Se vuoi aggiornamenti su PHP e MySQL su Google Cloud Platform inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su PHP e MySQL su Google Cloud Platform

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento dei dati per attività di marketing