Perché Laravel sta prendendo la comunità PHP di Storm

Devo ammettere: a un certo punto, mi sentivo un po 'giù nel linguaggio PHP. Un numero di commoventi articoli di odio di PHP circolavano sul web come un virus, e alcuni dei suoi scenari di punta, come CodeIgniter, stavano rapidamente diventando obsoleti. Per tutto il tempo, Ruby on Rails sembrava essere al comando del pacchetto, in termini di innovazione e facilità di sviluppo. Col passare del tempo, mi sono ritrovato a raggiungere sempre più la mia cintura di strumenti Ruby.

Ma, un giorno, ho scoperto un nuovo ed elegante framework, chiamato Laravel. All'inizio, l'ho liquidato come un ennesimo clone di Sinatra che sarebbe rapidamente diminuito nel nulla, mentre lo sviluppatore principale l'aveva abbandonato. Ma, ancora, settimana dopo settimana, i miei feed di social network erano in voga, elogiando la leggibilità di Laravel. "Potrebbe essere," pensavo tra me e me, "che PHP abbia finalmente un quadro veramente moderno?"

Ulteriori informazioni su Laravel su http://laravel.com

Non ero più disposto a sedermi ai margini; era tempo di scavare. Un anno dopo, e io sono uno dei suoi più grandi evangelisti. Laravel rende di nuovo PHP divertente! Ancora meglio, non credo più che PHP sia destinato per sempre a siti per lo più personali e brutti blog WordPress. No; infatti, è convinzione di questo scrittore che, grazie a Laravel, Composer e PHP 5.5, stiamo per sperimentare la prossima rinascita del linguaggio server-side più popolare del web.

Per installare l'ultima versione di sviluppo di Laravel (v4), devi prima installare Composer. Quindi, clonare semplicemente il repository e installare le dipendenze. git clone git: //github.com/illuminate/app.git myApp e installazione di compositore. Sei pronto per andare!


Eloquente

La maggior parte degli sviluppatori PHP inizia il suo percorso annidando innumerevoli linee di SQL direttamente nel loro frigido, illeggibile PHP. Inutile dire che, escludendo i siti web di base, questo porta rapidamente a un disordine irraggiungibile.

Ricordi quando hai sentito parlare di ActiveRecord di Ruby on Rails? Bene, nella parte finale del mondo di PHP, Eloquent è la sua prima implementazione.

Bisogno di alcuni esempi?

// Recupera tutte le attività $ tasks = Task :: all (); // Recupera l'attività con un id di 1 $ task = Task :: find (1); // Aggiorna un'attività $ task = Task :: find (1); $ task-> title = 'Metti giù quel cookie!'; $ Task-> save (); // Crea una nuova attività Task :: create (['title' => 'Write article']); // Elimina un'attività Task :: find (1) -> delete ();

Gente, non è possibile scrivere codice più leggibile in PHP! Ora sarebbe una cosa se Eloquent ti permettesse solo di eseguire operazioni CRUD di base su un tavolo, ma questo non è certo il caso.

Considera le relazioni della tabella, come un utente e le sue rispettive attività. In Laravel, dopo aver impostato un metodo di ricerca rapida per ciascun modello, possiamo facilmente gestire la relazione one-to-one o qualsiasi altra associazione. Ecco alcuni esempi per stuzzicare l'appetito.

// Ottieni tutte le attività dall'autore con un id di 1 $ tasks = User :: find (1) -> tasks; // Ottieni l'autore di un'attività $ author = Task :: find (5) -> user () -> username; // Inserisce una nuova attività per autore $ task = new Task ([title: 'Go to store.']); User :: trovare (1) -> (compiti) -> inserire ($ task);

Non è un problema considerare Eloquent come la migliore implementazione di ActiveRecord nel linguaggio PHP.


Pacchetti di compositori

Installa compositore.

A partire da Laravel 4 (attualmente in Alpha), l'intero framework sarà modularizzato e disponibile come pacchetti di Composer individuali.

Composer è un sistema di packaging per PHP simile alla PEAR, ma migliore. Rende il processo di gestione delle dipendenze il più semplice possibile.

Pensa all'ecosistema quadro esistente. Al momento, sei costretto a convivere con il set di funzionalità di ogni framework. Non puoi scegliere, ad esempio, di usare Eloquent in un'applicazione CakePHP. Come puoi immaginare, questa verità ha portato a un folle processo di reinventare la ruota più e più volte ... e oltre.

Signore e signori, il futuro di PHP è modulare. Perché installare una struttura gonfia e massiccia, quando si richiedono solo alcune delle sue offerte? Bene, presto, non dovrai. Richiede solo Eloquent in un progetto semplice? Bene, non è un problema! Basta installarlo tramite Composer e andare avanti!

Quindi, se ci stiamo spostando verso un mondo PHP modulare più basato su pacchetti, come si inserisce Laravel? Beh, pensalo come una collezione predeterminata di pacchi, avvolti in un arco! Ancora meglio, se dovessi aggiornare l'ultima versione del framework, è facile come correre aggiornamento del compositore.

Come esempio della flessibilità offerta, aggiungiamo la famosa libreria di test di Mockery a un'applicazione Laravel. Inizia con un nuovo progetto Laravel 4 e modificalo composer.json file per richiedere Mockery.

"require": "illuminate / foundation": "> = 1.0.0", "mockery / mockery": "dev-master", "autoload": "classmap": ["app / controller", " app / models "," app / database / migrations "," app / tests / TestCase.php "]

Fai riferimento a Packagist.org per un elenco dei pacchetti di Composer disponibili, oltre alle istruzioni di installazione.

Ora che abbiamo informato Composer che la nostra applicazione richiede Mockery, possiamo installare le dipendenze applicabili.

aggiornamento del compositore

E questo è tutto! Ora possiamo usare Mockery nei nostri test. Questo è il potere di Composer e Laravel 4 al lavoro! Abbiamo ruote; smettiamo di crearne di nuovi! Centinaia su centinaia di pacchetti sono disponibili tramite Packagist.org.

   

Centinaia su centinaia di pacchetti sono disponibili tramite Packagist.org.


Itinerari

Molti sviluppatori PHP all'inizio non hanno familiarità con qualcosa di diverso dal più naturale dei sistemi di percorso. Creare un albero di directory per abbinare l'URI desiderato e andare avanti. Ad esempio, aggiungi un index.php file nella seguente directory: blog / admin /, e, ora, puoi accedervi sfogliando: localhost: 8888 / blog / admin / index.php. Facile! Bene, forse all'inizio; ma probabilmente scoprirai che hai bisogno di maggiore flessibilità e controllo su quale rotta viene attivata nella tua applicazione.

Laravel adotta un approccio incredibilmente semplice e facile da usare per il routing. Ad esempio, scriviamo il percorso necessario per visualizzare una vista per il profilo di un utente.

Route :: get ('users / id', function ($ id) // trova l'utente $ user = User :: find ($ id); // mostra la vista e passa l'oggetto utente return View :: make ('users.profile') -> con ('utente', $ utente););

Ora, quando un utente richiede example.com/users/1, il utenti / profile.php la vista sarà resa.

In alternativa, possiamo usare i controller tradizionali per gestire invece la logica.

Route :: get ('users / id', 'Users @ show');

Adesso, Controller / Users.php sarà responsabile per il rendering della vista - in particolare il mostrare metodo.

con ('utente', $ utente); 

Facile autenticazione

Quasi qualsiasi applicazione web di sostanza richiederà una qualche forma di autenticazione. Laravel fornisce un'interfaccia semplice, ma facile da usare per l'autenticazione degli utenti.

Inizia creando un utenti tabella con i campi necessari per il nome utente e parola d'ordine. Ricorda: questo è un caso d'uso perfetto per una migrazione!

Laravel può allora tentativo per accedere a un utente - probabilmente in base ai valori forniti dall'utente da un modulo.

Ecco un esempio di base, meno l'aspetto della validazione.

Route :: post ('login', function () $ credentials = array ('username' => Input :: get ('username'), 'password' => Input :: get ('password')); / / eseguire la convalida se (Auth :: attempt ($ credentials)) // Le credenziali corrispondono Accesso eseguito return Redirect :: to ('admin / profile'););

Nota che dietro le quinte Laravel cancellerà automaticamente la password fornita e la confronterà con ciò che è memorizzato nel utenti tavolo.

Supponendo che le credenziali dell'utente corrispondano, l'ID utente verrà archiviato nella sessione e l'utente effettuerà l'accesso. In caso di richieste successive, è possibile recuperare il nome utente dell'utente attualmente connesso con:

$ user = Auth :: user () -> username;

Invio di email

Ammettilo: inviare email tramite la tua applicazione è sempre più complicato di quanto dovrebbe essere. Non più in Laravel 4!

Costruito sul popolare pacchetto SwiftMailer, ora ne trovi uno nuovo config / mail.php file nella tua applicazione. Qui è dove è possibile specificare le credenziali necessarie al proprio provider di posta elettronica. Ecco una versione ridotta di ciò che troverai:

 'smtp.example.com', 'port' => 2525, 'da' => array ('address' => null, 'name' => null), 'encryption' => 'tls', 'username' = > null, 'password' => null,);

Sostituisci semplicemente i valori con quelli del tuo server email, di conseguenza.

Successivamente, abbiamo bisogno di una vista per l'email. Creiamo uno, chiamato welcome.blade.php, che verrà utilizzato quando un nuovo membro si registra per il nostro sito Web dei fan di Justin Bieber.

  Salve, $ utente-> nome. Grazie ancora per esserti iscritto alle ultime notizie di Justin Bieber! Non vediamo l'ora di vedervi in ​​giro. Grazie, gestione  

Quando tutto è a posto, configuriamo il percorso di esempio necessario e inviamo l'email.

Route :: get ('/', function () $ user = User :: find (1); $ data = ['user' => $ user]; // vista email, dati per visualizzazione, chiusura per invio email Mail :: send ('email / welcome', $ data, funzione ($ message) usa ($ user) $ message -> a ($ user-> email) -> subject ('Welcome Bieber Fan!') -> attach ('images / bieberPhoto.jpg');); ritorna 'Email di benvenuto inviata!';);

Piuttosto semplice, eh? Prendiamo il nuovo utente dalla tabella e spariamo via email all'indirizzo associato a quell'utente. Grazie alla funzionalità SwiftMailer, eseguire azioni apparentemente complesse, come allegare file, è un gioco da ragazzi! Ora, ogni nuovo membro riceve una foto di Justin Bieber al momento dell'iscrizione. Perfezionare!


BFFs con Backbone

"Backbone fornisce la struttura per il tuo codice spaghetti disordinato!"

Laravel 4 rende il processo di creazione delle API RESTful il più semplice possibile. La chiave sta nel modo in cui, per impostazione predefinita, JSON verrà restituito da una rotta.

Immaginiamo di dover restituire un elenco di tutti gli utenti come JSON. Bene, Chuck, possiamo realizzarlo in una sola riga.

Route :: get ('users', function () return User :: all (););

Se si esegue questa rotta, verrà visualizzato un po 'di JSON, come ad esempio:

[ "Id": 1, "username": "[email protected]",  "id": 2, "username": "[email protected]"]

Chiedendosi dove parola d'ordine il campo è? In Laravel, all'interno del modello associato alla tabella, possiamo specificare, tramite a $ nascosto proprietà, quali campi nascondere dall'output JSON.

Ora, con una libreria JavaScript, come Backbone, possiamo recuperare questi dati con facilità.

var User = Backbone.Model.extend (); var UsersCollection = Backbone.Collection.extend (model: User, url: '/ users'); var users = new UsersCollection; users.fetch (); users.toJSON (); // [Oggetto, Oggetto, Oggetto]

Che dire invece del recupero di un singolo utente? Bene, per prima cosa dovremmo impostare la corretta rotta di Laravel:

Route :: get ('users / id', function ($ id) return User :: find ($ id););

Come abbiamo appreso, questo restituirà il JSON per l'utente richiesto (meno il parola d'ordine). Successivamente, creiamo un modello Backbone e recuperiamo i dati.

var User = Backbone.Model.extend (urlRoot: '/ users'); var user = new User (id: 1); user.fetch (); // id: 1, nome utente: '[email protected]'

Nota come il peso del lavoro è sul lato client? Il nostro codice Laravel è il più semplice possibile.


migrazioni

Se sei uno sviluppatore PHP in esclusiva, è probabile che tu non abbia ancora sperimentato la gioia delle migrazioni, che sono state inizialmente rese popolari dal framework Ruby on Rails.

Pensa alle migrazioni come controllo della versione per il tuo database. Cosa succederebbe se il giorno dopo avessi aggiunto quel nuovo campo al tuo compiti tavolo, hai capito che non era necessario dopotutto. Bene, dovresti rimuovere manualmente il campo, giusto? Ma che dire degli altri sviluppatori del tuo team? Il loro codice potrebbe rompersi se non glielo dici!

Con le migrazioni, tuttavia, limitiamo semplicemente il rollback della precedente migrazione e continuiamo con i nostri giorni! Ancora meglio, quando si spingono le modifiche al proprio server, è semplice php artisan migrate comando aggiornerà automagicamente il tuo database di produzione. Se combinato con lo Schema Builder di Laravel, rende il processo di gestione dei database il più semplice possibile.

Creiamo una migrazione per aggiungere un nuovo utenti tabella al nostro database. Dalla riga di comando:

migrazione php artisan: make create_users_table --table = users --create

Nel frammento sopra, specifichiamo il nome della tabella, così come il --creare flag, per specificare che stiamo creando una nuova tabella, piuttosto che modificarne una esistente.

Questo comando creerà un nuovo file di migrazione all'interno della nostra applicazione. Possiamo quindi sfruttare la classe Schema di Laravel per preparare lo schema della nostra tabella.

incrementi ( 'id'); $ Tavola-> string ( 'title'); );  / ** * Invertire le migrazioni. * / public function down () Schema :: drop ('tasks'); 

Nota come questa classe offre due metodi: su e giù, che specifica quale azione deve intraprendere Laravel durante l'esecuzione di una migrazione, oltre a ripristinarla.

In questo caso, su su(), creiamo una nuova tabella, compiti, e specificare due campi per il id e titolo del compito, rispettivamente. Quando si effettua il rollback della migrazione, si elimina semplicemente la tabella.

Esegui la migrazione tornando al terminale e digitando:

php artisan migrate

Questo è tutto! Ora hai un nuovo marchio compiti tavolo con due campi! ... Uh oh, hai bisogno di rotolare indietro? Semplice:

php artisan migrate: rollback

addio compiti tavolo.


Lama

Il motore di template Blade di Laravel fornisce una sintassi pulita per le viste. Ad esempio, con un normale PHP, per filtrare un elenco di persone ed echeggiare i rispettivi nomi all'interno di un elemento della lista, potremmo scrivere:

Questa sintassi può essere applicata alla maggior parte delle strutture di controllo di PHP.

Non è male, ma possiamo fare di meglio. Qualsiasi vista di Laravel che contiene il .blade.php l'estensione del file verrà analizzata di conseguenza. Di conseguenza, lo snippet precedente può essere sostituito con:

    @foreach ($ persone come $ p)
  • $ p
  • @endforeach

Si noti come le variabili da echeggiare sono racchiuse all'interno , simile a quello che potresti trovare in un motore di template JavaScript, come Handlebars.

Blade può anche essere usato per eleganti layout e pagine master. Creiamo una vista principale di base per dimostrare questa funzionalità.

// views / layout.blade.php       
@yield ( 'contenitore')

Il @dare la precedenza la linea è la chiave. Questo specifica che ogni bambino visualizza una sezione id di contenitore dovrebbe essere annidato lì.

Creiamo quindi una nuova vista.

// views / home / hello.blade.php @layout ('layout') @section ('contenitore') 

Ciao, $ utente-> nome!

@endsection

Fatto! Semplici pagine master in PHP!


Controller risorse

Senza un po 'di aiuto, la creazione di un servizio RESTful in PHP può rivelarsi alquanto difficile. Bene, in Laravel 4, non potrebbe essere più semplice. Il framework offre ciò che noi chiamiamo Restful Resources. Proviamoci.

Dentro il tuo itinerari file, specificare una nuova risorsa.

Route :: resource ('tasks', 'TasksController');

Questa linea di codice indica che vogliamo creare una nuova risorsa, compiti, e posizionare il TasksController responsabile incaricato della gestione della logica per ciascun percorso.

Quando si seguono i principi di REST, questa risorsa registra automaticamente i percorsi per:

  • Ottieni attività (mostra tutte le attività)
  • Ottieni attività / id (Mostra attività singola)
  • Ottieni attività / crea (Visualizza modulo per creare una nuova attività)
  • Attività POST (Crea una nuova attività)
  • GET task / id / edit (Modifica singola attività)
  • Attività PUT / id (attività di aggiornamento)
  • ELIMINA le attività / id (Elimina attività)

Quindi, creiamo quello TasksController, ma, piuttosto che farlo manualmente, lasceremo che Artisan gestisca il boilerplate.

controller php artisan: make TasksController

Questo creerà un nuovo controllori / TasksController.php controller e riempirlo con un po 'di caldaia.

 

Ciascuno di questi metodi verrà attivato quando viene attivata la rotta RESTful applicabile. Quindi, per visualizzare un modulo per creare un nuovo compito, caricheremo la vista applicabile all'interno di creare metodo, che verrà attivato quando example.com/tasks/create è richiesto. Quella forma dovrebbe POST a /compiti, nel qual caso il memorizzare il metodo verrà attivato.

Non potrebbe essere più pulito!

Fare riferimento alla pagina Vimeo di UserScape per gli ultimi screencast ufficiali di Laravel


Semina del database

Quante volte ti sei trovato manualmente a "seminare" una tabella di database con record fittizi, ai fini del test? Per me, beh, è ​​un gran numero! Laravel 4 ci consente di specificare a seme file per un tavolo.

Per provarlo, crea un nuovo file con lo stesso nome della rispettiva tabella all'interno del app / database / semi directory della tua applicazione. Questo file dovrebbe memorizzare una matrice di matrici, ciascuna contenente le coppie chiave-valore necessarie. Ecco un esempio:

 'Vai al negozio'] ['title' => 'Finish Laravel article'] ['title' => 'Pick up eggs.' ]]);

Abbiamo ora descritto tre nuove righe per il compiti tabella nel nostro database. Lo seminiamo.

php artisan db: seed

Fatto!


Model Setters and Getters

C'è probabilmente una varietà di azioni che si attivano di frequente quando si imposta o si ottiene un campo da una tabella di database. Ad esempio, quando un utente si registra, per seguire le best practice di sicurezza, dovremmo sempre cancellarne la password. Invece di eseguire manualmente il lavoro, aggiorno invece il file Utente modello e specificare che, quando si imposta una password, dovrebbe prima essere sottoposto a hash.

parola d'ordine ); 

Facile! Ora, non dobbiamo mai preoccuparci di quel pezzo del puzzle, quando si registra un nuovo utente. Naturalmente, è disponibile anche l'opzione inversa, nel caso in cui sia necessario elaborare il valore di un campo prima di "ottenerlo".

E se avessimo bisogno di prifiificare un timestamp o un nome? Anche questo può essere realizzato attraverso il modello, se lo si desidera.

firstName. ". $ this-> lastName;

Questo nuovo nome e cognome() il metodo sarà ora disponibile per la nostra istanza utente.

echo User :: find (1) -> fullName (); // John Doe

Comunità (Conferenza)

Forse più importante di ogni altra cosa, Laravel, in un periodo relativamente breve, ha accumulato una fiorente comunità evangelica, composta da alcuni degli sviluppatori più influenti della comunità PHP.

Perché questo è importante? Semplice: con l'evangelismo arriva sia l'educazione che il contributo. Il più grande ostacolo per un nuovo framework è quello di far uscire la voce e mostrare alla gente come usare la cosa dang! Fortunatamente, Laravel eccelle nella documentazione e nelle esercitazioni / screencast sul Web - compreso un corso completo da parte tua!

Impara i dettagli di Laravel qui su Tuts + Premium!

La verità è che abbiamo appena scalfito la superficie di ciò che è possibile in Laravel. Non abbiamo ancora trattato la gestione degli errori di Laravel, l'integrazione con PHPUnit, il caricamento ansioso (prima e dopo il recupero delle raccolte) e molto altro. Assicurati di fare riferimento alla fantastica documentazione per approfondire il quadro e tenere gli occhi aperti per la versione ufficiale della Versione 4!

La popolare comunità Nettuts + offre un numero di tutorial specifici per Laravel.

Se questo articolo è stato l'impulso per il tuo nuovo amore per PHP e Laravel, forse considererai la partecipazione al primo Laracon annuale (Conferenza), in programma a fine febbraio 2013, a Washington DC. Forse ci vedremo lì!

La prima conferenza di Laravel, Laracon, si terrà a Washington DC dal 22 al 23 febbraio 2013. Per saperne di più, consultare http://conference.laravel.com