Prologo
Primi Passi
Architettura
Le Basi
- Routing
- Middleware
- Protezione da CSRF
- Controller
- Richieste
- Risposte
- Views
- Blade
- Vite
- URL
- Sessioni
- Validazione
- Errori
- Logging
Approfondimenti
- Artisan
- Broadcasting
- Cache
- Collezioni
- Concorrenza
- Contesto
- Contratti
- Eventi
- File System
- Helpers
- Client HTTP
- Localizzazione
- Notifiche
- Sviluppo di Package
- Processi
- Code
- Rate-limiting
- Stringhe
- Scheduling di Task
Sicurezza
Database
Eloquent ORM
Testing
Package
Valet
- Introduzione
- Installazione
- Servire Siti
- Condivisione dei siti
- Variabili d’Ambiente Specifiche per Sito
- Proxying di Servizi
- Driver Personalizzati per Valet
- Altri comandi di Valet
- Directory e File di Valet
Introduzione
Cerchi un modo ancora più semplice per sviluppare applicazioni Laravel su macOS o Windows? Dai un’occhiata a Laravel Herd. Herd include tutto il necessario per iniziare con lo sviluppo Laravel, incluso Valet, PHP e Composer.
Laravel Valet è un ambiente di sviluppo per i minimalisti di macOS. Laravel Valet configura il tuo Mac per eseguire sempre Nginx in background all’avvio del computer. Poi, utilizzando DnsMasq, Valet fa da proxy per tutte le richieste sul dominio *.test
indirizzandole ai siti installati sulla tua macchina locale.
In altre parole, Valet è un ambiente di sviluppo Laravel estremamente veloce che utilizza circa 7 MB di RAM. Valet non sostituisce completamente Sail o Homestead, ma offre un’ottima alternativa se desideri basi flessibili, preferisci una velocità estrema o lavori su una macchina con una quantità limitata di RAM.
Fin da subito, il supporto di Valet include:
- Laravel
- Bedrock
- CakePHP 3
- ConcreteCMS
- Contao
- Craft
- Drupal
- ExpressionEngine
- Jigsaw
- Joomla
- Katana
- Kirby
- Magento
- OctoberCMS
- Sculpin
- Slim
- Statamic
- Static HTML
- Symfony
- WordPress
- Zend
Tuttavia, puoi estendere Valet con i tuoi driver personalizzati.
Installazione
Valet richiede macOS e Homebrew. Prima dell’installazione, assicurati che nessun altro programma come Apache o Nginx stia utilizzando la porta 80 della tua macchina locale.
Per iniziare, devi prima assicurarti che Homebrew sia aggiornato utilizzando il comando update
:
brew update
Successivamente, dovresti usare Homebrew per installare PHP:
brew install php
Dopo aver installato PHP, sei pronto per installare il Composer package manager. Inoltre, dovresti assicurarti che la directory $HOME/.composer/vendor/bin
sia inclusa nel "PATH" del tuo sistema. Dopo aver installato Composer, puoi installare Laravel Valet come pacchetto globale di Composer:
composer global require laravel/valet
Infine, puoi eseguire il comando install
di Valet. Questo configurerà e installerà Valet e DnsMasq. Inoltre, i demoni di cui Valet dipende verranno configurati per avviarsi all’avvio del sistema:
valet install
Una volta installato Valet, prova a pingare qualsiasi dominio *.test
nel tuo terminale utilizzando un comando come ping foobar.test
. Se Valet è installato correttamente, dovresti vedere questo dominio rispondere su 127.0.0.1
.
Valet avvierà automaticamente i servizi necessari ogni volta che la tua macchina si avvia.
Versioni PHP
Invece di cambiare la versione PHP globale, puoi dire a Valet di usare versioni PHP diverse per ogni sito tramite il comando
isolate
command.
Valet ti permette di cambiare versione PHP usando il comando valet use php@version
. Se la versione PHP specificata non è già installata, Valet la installerà tramite Homebrew:
valet use php@8.2
valet use php
Puoi anche creare un file .valetrc
nella cartella principale del tuo progetto. Il file .valetrc
deve contenere la versione PHP che il sito deve usare:
php=php@8.2
Una volta creato questo file, puoi semplicemente eseguire il comando valet use
e Valet leggerà il file per determinare la versione PHP preferita del sito.
Valet serve una sola versione PHP alla volta, anche se hai più versioni PHP installate.
Database
Se la tua applicazione ha bisogno di un database, dai un’occhiata a DBngin, uno strumento gratuito e tutto-in-uno per la gestione dei database che include MySQL, PostgreSQL e Redis. Dopo aver installato DBngin, puoi connetterti al tuo database su 127.0.0.1
usando l’username root
e una password vuota.
Reimpostare l’installazione
Se hai problemi a far funzionare correttamente la tua installazione di Valet, eseguire il comando composer global require laravel/valet
seguito da valet install
reimposterà l’installazione e può risolvere diversi problemi. In rari casi, potrebbe essere necessario effettuare un "hard reset" di Valet eseguendo valet uninstall --force
seguito da valet install
.
Aggiornare Valet
Puoi aggiornare l’installazione di Valet eseguendo il comando composer global require laravel/valet
nel tuo terminale. Dopo l’aggiornamento, è una buona pratica eseguire il comando valet install
affinché Valet possa apportare ulteriori aggiornamenti ai tuoi file di configurazione, se necessario.
Aggiornamento a Valet 4
Se stai aggiornando da Valet 3 a Valet 4, segui i seguenti passaggi per aggiornare correttamente la tua installazione di Valet:
- Se hai aggiunto file
.valetphprc
per personalizzare la versione di PHP del tuo sito, rinomina ogni file.valetphprc
in.valetrc
. Poi, aggiungiphp=
all’inizio del contenuto esistente del file.valetrc
. - Aggiorna eventuali driver personalizzati per adattarli allo spazio dei nomi, alle estensioni, ai type-hints e ai return type-hints del nuovo sistema dei driver. Puoi consultare SampleValetDriver di Valet come esempio.
- Se usi PHP 7.1 – 7.4 per servire i tuoi siti, assicurati di continuare a utilizzare Homebrew per installare una versione di PHP 8.0 o superiore, poiché Valet utilizzerà questa versione, anche se non è la versione primaria collegata, per eseguire alcuni dei suoi script.
Servire Siti
Una volta che Valet è installato, sei pronto per iniziare a servire le tue applicazioni Laravel. Valet fornisce due comandi per aiutarti a servire le tue applicazioni: park
e link
.
Il comando park
Il comando park
registra una directory sulla tua macchina che contiene le tue applicazioni. Una volta che la directory è stata "parcheggiata" con Valet, tutte le directory al suo interno saranno accessibili nel tuo browser web su http://<nome-directory>.test
:
cd ~/Sites
valet park
È tutto qui. Ora, qualsiasi applicazione creata all’interno della tua directory "parcheggiata" sarà automaticamente servita utilizzando la convenzione http://<nome-directory>.test
. Quindi, se la tua directory parcheggiata contiene una cartella chiamata "laravel", l’applicazione all’interno di quella cartella sarà accessibile su http://laravel.test
. Inoltre, Valet permette automaticamente di accedere al sito utilizzando sottodomini jolly (http://foo.laravel.test
).
Il comando link
Il comando link
può essere utilizzato anche per servire le tue applicazioni Laravel. Questo comando è utile se vuoi servire un singolo sito in una directory e non l’intera directory:
cd ~/Sites/laravel
valet link
Una volta che un’applicazione è stata collegata a Valet usando il comando link
, puoi accedere all’applicazione usando il nome della sua directory. Quindi, il sito collegato nell’esempio sopra può essere raggiunto tramite http://laravel.test
. Inoltre, Valet permette automaticamente di accedere al sito usando sottodomini wildcard (http://foo.laravel.test
).
Se desideri servire l’applicazione con un hostname diverso, puoi passare l’hostname al comando link
. Ad esempio, puoi eseguire il seguente comando per rendere un’applicazione disponibile su http://application.test
:
cd ~/Sites/laravel
valet link application
Naturalmente, puoi anche servire applicazioni su sottodomini usando il comando link
:
valet link api.application
Puoi eseguire il comando links
per visualizzare un elenco di tutte le directory collegate:
valet links
Il comando unlink
può essere usato per eliminare il link simbolico per un sito:
cd ~/Sites/laravel
valet unlink
Protezione dei Siti con TLS
Per impostazione predefinita, Valet serve i siti tramite HTTP. Tuttavia, se desideri servire un sito tramite TLS crittografato utilizzando HTTP/2, puoi usare il comando secure
. Ad esempio, se il tuo sito è servito da Valet sul dominio laravel.test
, dovresti eseguire il seguente comando per proteggerlo:
valet secure laravel
Per "disabilitare la sicurezza" di un sito e tornare a servire il traffico tramite HTTP semplice, usa il comando unsecure
. Come il comando secure
, questo comando accetta il nome dell’host che desideri disabilitare:
valet unsecure laravel
Servire un Sito Predefinito
A volte potresti voler configurare Valet per servire un sito "predefinito" invece di un 404
quando visiti un dominio test
sconosciuto. Per fare ciò, puoi aggiungere un’opzione default
al tuo file di configurazione ~/.config/valet/config.json
indicando il percorso del sito che deve essere il sito predefinito:
"default": "/Users/Sally/Sites/example-site",
Versioni PHP per Sito
Per impostazione predefinita, Valet utilizza l’installazione PHP globale per servire i tuoi siti. Tuttavia, se hai bisogno di supportare più versioni di PHP su vari siti, puoi usare il comando isolate
per specificare quale versione di PHP un determinato sito deve utilizzare. Il comando isolate
configura Valet per usare la versione PHP specificata per il sito che si trova nella tua directory di lavoro corrente:
cd ~/Sites/example-site
valet isolate php@8.0
Se il nome del tuo sito non corrisponde al nome della directory che lo contiene, puoi specificare il nome del sito usando l’opzione --site
:
valet isolate php@8.0 --site="site-name"
Per comodità, puoi usare i comandi valet php
, composer
e which-php
per inoltrare le chiamate alla PHP CLI o allo strumento appropriato in base alla versione PHP configurata per il sito:
valet php
valet composer
valet which-php
Puoi eseguire il comando isolated
per mostrare un elenco di tutti i tuoi siti isolati e le loro versioni PHP:
valet isolated
Per riportare un sito alla versione PHP globale installata da Valet, puoi eseguire il comando unisolate
dalla directory principale del sito:
valet unisolate
Condivisione dei siti
Valet include un comando per condividere i tuoi siti locali con il mondo, offrendo un modo semplice per testare il tuo sito su dispositivi mobili o condividerlo con membri del team e clienti.
Valet supporta nativamente la condivisione dei tuoi siti tramite ngrok o Expose. Prima di condividere un sito, dovresti aggiornare la configurazione di Valet usando il comando share-tool
, specificando ngrok
o expose
:
valet share-tool ngrok
Se scegli uno strumento e non lo hai installato tramite Homebrew (per ngrok) o Composer (per Expose), Valet ti chiederà automaticamente di installarlo. Naturalmente, entrambi gli strumenti richiedono di autenticare il tuo account ngrok o Expose prima di poter iniziare a condividere i siti.
Per condividere un sito, naviga nella directory del sito nel tuo terminale ed esegui il comando share
di Valet. Un URL accessibile pubblicamente sarà copiato negli appunti e pronto per essere incollato direttamente nel tuo browser o condiviso con il tuo team:
cd ~/Sites/laravel
valet share
Per interrompere la condivisione del tuo sito, puoi premere Ctrl + C
.
Se stai usando un server DNS personalizzato (come
1.1.1.1
), la condivisione tramite ngrok potrebbe non funzionare correttamente. Se questo è il caso sul tuo computer, apri le impostazioni di sistema del tuo Mac, vai alle impostazioni di Rete, apri le impostazioni Avanzate, poi vai alla scheda DNS e aggiungi127.0.0.1
come primo server DNS.
Condivisione dei Siti via Ngrok
Condividere il tuo sito usando ngrok richiede di creare un account ngrok e configurare un token di autenticazione. Una volta ottenuto il token di autenticazione, puoi aggiornare la configurazione di Valet con quel token:
valet set-ngrok-token YOUR_TOKEN_HERE
Puoi passare parametri aggiuntivi di ngrok al comando share, come
valet share --region=eu
. Per maggiori informazioni, consulta la documentazione ngrok.
Condivisione dei Siti tramite Expose
Condividere il tuo sito usando Expose richiede di creare un account Expose e autenticarti con Expose tramite il tuo token di autenticazione.
Puoi consultare la documentazione di Expose per informazioni sui parametri aggiuntivi della riga di comando supportati.
Condividere siti sulla tua rete locale
Valet limita il traffico in entrata all’interfaccia interna 127.0.0.1
per impostazione predefinita, così la tua macchina di sviluppo non è esposta a rischi di sicurezza da Internet.
Se vuoi permettere ad altri dispositivi nella tua rete locale di accedere ai siti Valet sulla tua macchina tramite l’indirizzo IP della tua macchina (esempio: 192.168.1.10/application.test
), dovrai modificare manualmente il file di configurazione Nginx appropriato per quel sito rimuovendo la restrizione sulla direttiva listen
. Dovresti rimuovere il prefisso 127.0.0.1:
dalla direttiva listen
per le porte 80 e 443.
Se non hai eseguito valet secure
sul progetto, puoi aprire l’accesso di rete per tutti i siti non HTTPS modificando il file /usr/local/etc/nginx/valet/valet.conf
. Tuttavia, se stai servendo il sito del progetto tramite HTTPS (hai eseguito valet secure
per il sito), dovresti modificare il file ~/.config/valet/Nginx/app-name.test
.
Una volta aggiornato il file di configurazione di Nginx, esegui il comando valet restart
per applicare le modifiche.
Variabili d’Ambiente Specifiche per Sito
Alcune applicazioni che utilizzano altri framework possono dipendere da variabili d’ambiente del server ma non offrono un modo per configurarle all’interno del tuo progetto. Valet ti permette di configurare variabili d’ambiente specifiche per sito aggiungendo un file .valet-env.php
nella root del tuo progetto. Questo file dovrebbe restituire un array di coppie sito / variabile d’ambiente che verranno aggiunte all’array globale $_SERVER
per ogni sito specificato nell’array:
<?php
return [
// Imposta $_SERVER['key'] a "value" per il sito laravel.test...
'laravel' => [
'key' => 'value',
],
// Imposta $_SERVER['key'] a "value" per tutti i siti...
'*' => [
'key' => 'value',
],
];
Proxying di Servizi
A volte potresti voler instradare un dominio Valet verso un altro servizio sulla tua macchina locale. Ad esempio, potrebbe capitarti di dover eseguire Valet mentre al contempo esegui un sito separato in Docker; tuttavia, Valet e Docker non possono utilizzare entrambe la porta 80 allo stesso tempo.
Per risolvere questo problema, puoi usare il comando proxy
per creare un proxy. Ad esempio, puoi instradare tutto il traffico da http://elasticsearch.test
a http://127.0.0.1:9200
:
# Proxy tramite HTTP...
valet proxy elasticsearch http://127.0.0.1:9200
# Proxy tramite TLS + HTTP/2...
valet proxy elasticsearch http://127.0.0.1:9200 --secure
Puoi rimuovere un proxy usando il comando unproxy
:
valet unproxy elasticsearch
Puoi usare il comando proxies
per elencare tutte le configurazioni dei siti che sono proxyate:
valet proxies
Driver Personalizzati per Valet
Puoi creare un tuo "driver" Valet per servire applicazioni PHP che utilizzano un framework o CMS non supportato nativamente da Valet. Quando installi Valet, viene creata una directory ~/.config/valet/Drivers
che contiene un file SampleValetDriver.php
. Questo file contiene un’implementazione di esempio del driver per dimostrare come scrivere un driver personalizzato. Creare un driver richiede solo di implementare tre metodi: serves
, isStaticFile
e frontControllerPath
.
Tutti e tre i metodi ricevono i valori $sitePath
, $siteName
e $uri
come argomenti. Il $sitePath
è il percorso completo del sito servito sulla tua macchina, come /Users/Lisa/Sites/my-project
. Il $siteName
è la parte "host" / "nome del sito" del dominio (my-project
). Il $uri
è l’URI della richiesta in arrivo (/foo/bar
).
Una volta completato il driver personalizzato per Valet, posizionalo nella directory ~/.config/valet/Drivers
utilizzando la convenzione di denominazione FrameworkValetDriver.php
. Ad esempio, se stai creando un driver Valet personalizzato per WordPress, il nome del tuo file dovrebbe essere WordPressValetDriver.php
.
Diamo un’occhiata a un’implementazione di esempio di ciascun metodo che il tuo driver Valet personalizzato deve implementare.
Il metodo serves
Il metodo serves
deve restituire true
se il tuo driver deve gestire la richiesta in arrivo. Altrimenti, il metodo deve restituire false
. Quindi, all’interno di questo metodo, dovresti cercare di determinare se il $sitePath
fornito contiene un progetto del tipo che stai cercando di servire.
Ad esempio, immaginiamo di scrivere un WordPressValetDriver
. Il nostro metodo serves
potrebbe apparire più o meno così:
/**
* Determine if the driver serves the request.
*/
public function serves(string $sitePath, string $siteName, string $uri): bool
{
return is_dir($sitePath.'/wp-admin');
}
Il metodo isStaticFile
Il metodo isStaticFile
deve determinare se la richiesta in arrivo è per un file "statico", come un’immagine o un foglio di stile. Se il file è statico, il metodo deve restituire il percorso completo del file statico sul disco. Se la richiesta in arrivo non è per un file statico, il metodo deve restituire false
:
/**
* Determine if the incoming request is for a static file.
*
* @return string|false
*/
public function isStaticFile(string $sitePath, string $siteName, string $uri)
{
if (file_exists($staticFilePath = $sitePath.'/public/'.$uri)) {
return $staticFilePath;
}
return false;
}
Il metodo
isStaticFile
verrà chiamato solo se il metodoserves
restituiscetrue
per la richiesta in arrivo e l’URI della richiesta non è/
.
Il metodo frontControllerPath
Il metodo frontControllerPath
dovrebbe restituire il percorso completamente qualificato al "front controller" della tua applicazione, che di solito è un file "index.php" o equivalente:
/**
* Ottieni il percorso completamente risolto al front controller dell'applicazione.
*/
public function frontControllerPath(string $sitePath, string $siteName, string $uri): string
{
return $sitePath.'/public/index.php';
}
Driver Locali
Se desideri definire un driver Valet personalizzato per un’applicazione singola, crea un file LocalValetDriver.php
nella directory principale dell’applicazione. Il tuo driver personalizzato può estendere la classe base ValetDriver
o un driver specifico esistente come LaravelValetDriver
:
use Valet\Drivers\LaravelValetDriver;
class LocalValetDriver extends LaravelValetDriver
{
/**
* Determina se il driver gestisce la richiesta.
*/
public function serves(string $sitePath, string $siteName, string $uri): bool
{
return true;
}
/**
* Ottiene il percorso completamente risolto al front controller dell'applicazione.
*/
public function frontControllerPath(string $sitePath, string $siteName, string $uri): string
{
return $sitePath.'/public_html/index.php';
}
}
Altri comandi di Valet
Command | Description |
---|---|
valet list |
Mostra un elenco di tutti i comandi di Valet. |
valet diagnose |
Genera diagnosi per aiutare nel debug di Valet. |
valet directory-listing |
Determina il comportamento della lista delle directory. Il valore predefinito è "off", che mostra una pagina 404 per le directory. |
valet forget |
Esegui questo comando da una directory "parked" per rimuoverla dalla lista delle directory "parked". |
valet log |
Visualizza un elenco di log scritti dai servizi di Valet. |
valet paths |
Visualizza tutti i tuoi percorsi "parked". |
valet restart |
Riavvia i demoni di Valet. |
valet start |
Avvia i demoni di Valet. |
valet stop |
Ferma i demoni di Valet. |
valet trust |
Aggiunge i file sudoers per Brew e Valet per permettere ai comandi di Valet di essere eseguiti senza richiedere la password. |
valet uninstall |
Disinstalla Valet: mostra le istruzioni per la disinstallazione manuale. Passa l’opzione --force per cancellare aggressivamente tutte le risorse di Valet. |
Directory e File di Valet
Potresti trovare utili le seguenti informazioni su directory e file quando risolvi problemi con il tuo ambiente Valet:
~/.config/valet
Contiene tutta la configurazione di Valet. Potresti voler mantenere un backup di questa directory.
~/.config/valet/dnsmasq.d/
Questa directory contiene la configurazione di DNSMasq.
~/.config/valet/Drivers/
Questa directory contiene i driver di Valet. I driver determinano come viene servito un particolare framework / CMS.
~/.config/valet/Nginx/
Questa cartella contiene tutte le configurazioni dei siti Nginx di Valet. Questi file vengono ricostruiti quando si eseguono i comandi install
e secure
.
~/.config/valet/Sites/
Questa cartella contiene tutti i link simbolici per i tuoi progetti collegati.
~/.config/valet/config.json
Questo file è il file di configurazione principale di Valet.
~/.config/valet/valet.sock
Questo file è il socket PHP-FPM utilizzato dall’installazione Nginx di Valet. Esisterà solo se PHP funziona correttamente.
~/.config/valet/Log/fpm-php.www.log
Questo file è il log degli errori PHP per l’utente.
~/.config/valet/Log/nginx-error.log
Questo file è il log utente per gli errori di Nginx.
/usr/local/var/log/php-fpm.log
Questo file è il registro di sistema per gli errori di PHP-FPM.
/usr/local/var/log/nginx
Questa directory contiene i log di accesso e di errore di Nginx.
/usr/local/etc/php/X.X/conf.d
Questa cartella contiene i file *.ini
per diverse configurazioni di PHP.
/usr/local/etc/php/X.X/php-fpm.d/valet-fpm.conf
Questo file contiene la configurazione del pool PHP-FPM.
~/.composer/vendor/laravel/valet/cli/stubs/secure.valet.conf
Questo file è la configurazione predefinita di Nginx usata per creare certificati SSL per i tuoi siti.
Accesso al Disco
Da macOS 10.14, l’accesso ad alcuni file e directory è limitato per impostazione predefinita. Queste restrizioni includono le cartelle Scrivania, Documenti e Download. Inoltre, l’accesso a volumi di rete e rimovibili è limitato. Pertanto, Valet consiglia di posizionare le cartelle del tuo sito al di fuori di queste posizioni protette.
Tuttavia, se desideri servire siti da una di queste posizioni, dovrai concedere a Nginx l’"Accesso Completo al Disco". Altrimenti, potresti incontrare errori del server o altri comportamenti imprevedibili da parte di Nginx, soprattutto durante la gestione di asset statici. Di solito, macOS ti chiederà automaticamente di concedere a Nginx l’accesso completo a queste posizioni. In alternativa, puoi farlo manualmente tramite System Preferences
> Security & Privacy
> Privacy
e selezionando Full Disk Access
. Successivamente, abilita tutte le voci nginx
nel pannello principale della finestra.