Alessio Forti

Configurare un ambiente di sviluppo per Laravel con MAMP

Le possibilità per mettere a punto un ambiente di sviluppo personalizzato per usare i nostri framework preferiti sono diverse, oggi vediamo uno dei modi per sviluppare una webapp in locale che usa Laravel.

Prima di tutto vediamo di cosa abbiamo bisogno:

  • Laravel: è un framework PHP che sta riscuotendo successo ed è scaricabarile da qui.
  • MAMP: è l’acronimo di Mac Apache MySQL PHP. È un’applicazione che ci permetterà di lanciare un server locale sulla nostra macchina senza troppi problemi. MAMP è specifico per OS X, XAMPP e WAMP sono disponibili anche per altre piattaforme, quindi le configurazioni del server possono essere leggermente differenti (XAMPP è disponibile anche per Mac).
  • Un buon editor di testo: consiglio Sublime Text 2.
  • Il Terminale e un Browser.

Configuriamo Laravel

Una volta che abbiamo scaricato Laravel, dopo che abbiamo rinominato la cartella decompressa con il nome del nostro progetto (oggi ho scelto laravel), la prima cosa che dobbiamo fare è assicurarci che la cartella laravel/storage/views abbia i permessi di scrittura. Quindi, da terminale, cambiamo directory fino a trovare la cartella laravel e poi usiamo chmod:

$ chmod -R 777 storage/views

Un passo molto importante nel configurare Laravel è quello di impostare una chiave univoca per la nostra applicazione, con questa Laravel si occuperà in automatico di gestire tutto quello che riguarda hashing, password ecc… Per impostarla possiamo inserire manualmente una stringa alfanumerica di 32 caratteri nel file application/config/application.php alla riga 'key' => 'LaMiaChiave', oppure usare Artisan, l’interfaccia da riga di comando di Laravel, che possiamo trovare nella root del nostro progetto sotto forma di eseguibile. Per usarlo, già che ci troviamo nella cartella laravel, da terminale eseguiamo:

$ php artisan key:generate

Una volta eseguito, se controlliamo il file application/config/application.php, notiamo che la chiave è stata generata in automatico. Ora possiamo spostare questa cartella in MAMP. Apriamo la cartella /Applications/MAMP/htdocs e spostiamoci dentro tutta la cartella che abbiamo scaricato: attenzione, spostiamo la cartella per intero e non semplicemente il suo contenuto. Questo per due motivi: il primo è che in questo modo possiamo avere più progetti su cui lavorare creando più directory all’interno di htdocs, il secondo è che se selezioniamo tutti gli elementi contenuti nella cartella e li spostiamo non sposteremo anche tutti i file nascosti come .gitignore e .htaccess che ci servirà più avanti.

Se ora avviamo MAMP e navighiamo su https://localhost:8888/laravel/public dovremmo essere in grado di vedere la schermata di default di Laravel. Bene.

Configuriamo MAMP

Dato che per accedere al sito dobbiamo navigare fino alla cartella public, vogliamo che gli utenti (ed anche noi nella fase di sviluppo) possano accedere direttamente a questo indirizzo senza che siano in grado di navigare nella struttura della nostra applicazione. Per farlo bisogna configurare il nostro server in modo che ad ogni richiesta al nostro sito, si venga ridiretti alla cartella public. Esisto diversi modi per farlo. Un modo è quello di impostare la nostra DocumentRoot sulla cartella public: apriamo MAMP, apriamo le preferenze e sotto la scheda Apache impostiamo il percorso che nel nostro caso sarà /Applications/MAMP/htdocs/laravel/public. Quindi, se ora navighiamo su https://localhost:8888, dovremmo vedere la schermata di default. Questo approccio ha il vantaggio di essere estremamente semplice e rapido, mentre ha lo svantaggio che possiamo lavorare su un solo progetto per volta (per lavorare su più progetti dovremmo reimpostare la DocumentRoot ogni volta che cambiamo progetto).

A noi, invece, serve qualcosa di più flessibile. Il risultato finale sarà che potremo collegarci direttamente all’indirizzo https://laravel.dev che in realtà punta a laravel/public.

Per cominciare dobbiamo cambiare alcune impostazioni in MAMP: apriamo le preferenze di MAMP e, sotto la scheda “Porte”, impostiamo il valore delle “Porte Apache” su :80. Il valore impostato è :8888 ed infatti prima ci siamo collegati all’indirizzo https://localhost:8888. Il valore delle porte di default in Apache è :80 e quindi non ci sarà bisogno di dichiararlo esplicitamente nell’URL.

Ora abbiamo bisogno di creare un host virtuale per Apache e quindi andiamo a modificare le impostazioni di Apache contenuto in MAMP: apriamo il file /Applications/MAMP/htdocs/extra/httpd-vhosts.conf in cui vengono registrati gli host virtuali ed inseriamo le seguenti righe, che non fanno altro che dichiarare l’esistenza di un nuovo host:

<VirtualHost *:80>
DocumentRoot '/Applications/MAMP/htdocs/laravel/public'
ServerName laravel.dev
</VirtualHost>

salviamo e modifichiamo /Applications/MAMP/htdocs/httpd.conf. Dobbiamo togliere il commento alla seguente riga in modo da includere il file che abbiamo appena modificato:

Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf

Ora è il momento di modificare /etc/hosts. Apriamolo da terminale con sudo ed aggiungiamo la riga

127.0.0.1 laravel.dev

salviamo e riavviamo Apache tramite MAMP. A questo punto all’indirizzo https://laravel.dev possiamo vedere la pagina di benvenuto che si aveva su https://localhost:8888/laravel/public.

Ora, in base alle configurazioni dei server potrebbe sorgere un problema di reindirizzamento. Per poterlo verificare aggiungiamo una nuova route alla nostra applicazione: in laravel/application/routes.php aggiungiamo:

Route::get('ciao', function() {
    return View::make('hello.ciao');
});

poi creiamo una nuova view in laravel/application/views/hello chiamata ciao.php ed inseriamo un bel

<h1>Ciao!</h1>

se tutto va bene collegandosi a https://laravel.dev/ciao dovrebbe comparire il messaggio che abbiamo appena inserito. Se questo non dovesse succedere e ricevessimo una messaggio di errore significa che dovremmo modificare il nostro .htaccess, perché in realtà, dietro le quinte, stiamo richiedendo la pagina https://laravel.dev/index.php/ciao. Quindi nel file laravel/public/.htaccess sostituiamo l’ultima direttiva di mod_rewrite.c con:

Options +FollowSymLinks
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . index.php [L]

Sarebbe interessante sapere se funziona allo stesso modo con XAMPP e WAMP su altre piattaforme, quindi se qualcuno vuol condividere le sue configurazioni locali i commenti saranno ben accetti.
In ogni caso buon divertimento!