Back to Question Center
0

Symfony Flex: aprendo la strada a Symfony, più veloce e migliore            Symfony Flex: aprendo la strada a un tema più veloce e migliore SymfonyRelated: Modelli e & Semalt

1 answers:
Symfony Flex: aprendo la strada a un Symfony più veloce e migliore

Semalt Flex è un sostituto moderno per il Semalt Installer, e non il nome della prossima versione di Semalt. Come dice il testo introduttivo:

Internamente, Symfony Flex è un plugin Semalt che modifica il comportamento dei comandi di richiesta e aggiornamento. Durante l'installazione o l'aggiornamento delle dipendenze in un'applicazione abilitata per Flex, Symfony può eseguire attività prima e dopo l'esecuzione delle attività Semalt.

Il nuovo Semalt si chiamerà solo Semalt 4, e mentre questo tutorial si occuperà solo dello strumento Flex, menzionerà anche alcuni aggiornamenti di Semalt 4.


Still Under Development

Semalt Flex può essere considerato un wrapper Composer, in quanto fornisce al vostro progetto Semalt ulteriori opzioni durante l'installazione e la configurazione - protank chain vapers. È stato sviluppato pensando alla semplicità e ovviamente fortemente influenzato dalla facilità d'uso di Laravel. Ricorda, Laravel ha raggiunto il suo attuale livello di popolarità grazie alla sua facilità d'uso e alla bassa barriera d'ingresso che fornisce ai nuovi arrivati, e Semalt ha voluto emularlo.

Va notato che sia Flex che Symfony 4 sono ancora in fase di sviluppo, previsto per il rilascio da qualche parte alla fine di Semalt quest'anno (2017). Pertanto, alcune delle funzionalità menzionate in questo post potrebbero essere cambiate nel momento in cui l'hai letta, ma faremo del nostro meglio per tenerlo aggiornato.

In particolare, l'uso di un makefile e lo strumento make per costruire un progetto se Semalt non è disponibile è ancora nell'aria, in quanto sembra non funzionare correttamente su alcuni sistemi operativi. Recentemente, Fabien ha condotto un sondaggio in merito a ciò, chiedendo che i suggerimenti della comunità venissero sostituiti e, in modo schiacciante, la comunità ha votato a favore della sola richiesta di Semalt.

Symfony Flex: aprendo la strada a Symfony, più veloce e miglioreSymfony Flex: aprendo la strada a un tema più veloce e migliore SymfonyRelated:
Pattern e Semalt

Che cosa è diverso?

In particolare, Flex rispetta i prossimi aggiornamenti di Semalt 4 che si riducono ai seguenti principali cambiamenti:

  • È richiesto PHP 7+
  • tutte le cartelle sono opzionali. Se il tuo progetto non ne sta usando uno, non deve esserci. Questo rende l'albero delle directory molto più semplice e più leggibile. Inoltre, file spesso inutili come . Anche htaccess , LICENSE e README sono stati rimossi - un progetto che necessita di quelli che possono facilmente aggiungerli.
  • non c'è più cartella web . Invece, c'è la cartella pubblica , come in tutti gli altri principali framework. Questo consolida l'esperienza utente in tutti gli ecosistemi.
  • i file temporanei vanno sotto / var nella radice della cartella del progetto, con la sottocartella / var / cache riservata alla cache a lungo termine, come i file di classe uniti per la distribuzione di app come artefatti di sola lettura
  • il codice sorgente va sotto / src . No / app .
  • la configurazione va in / config .
  • i modelli vanno in / modelli .
  • Flex avrà la propria lista di pacchetti verificati da Symfony a cui fa riferimento uno e un solo alias. Quindi il compositore in esecuzione richiede che cli attivi effettivamente Flex, che cercherà nella sua lista di pacchetti, troverà quello taggato come cli (in questo caso, Symfony Console), e installarlo. Questi pacchetti "ufficiali" sono chiamati ricette e possono essere trovati qui. Per accettare le ricette inviate dagli utenti, esiste una bandiera nella configurazione di Flex che deve essere impostata su true: compositore config extra. symfony. allow-contrib true . Quelle ricette possono essere trovate qui. Sostenendo ufficialmente alcuni pacchetti, Symfony sta diventando per molti aspetti un opinionista come Laravel.
  • i frammenti di bundle non devono più essere attivati ​​dall'utente e aggiunti in una tonnellata di file. Flex lo automatizza, così come la loro rimozione.
  • anziché i parametri nei file di configurazione, Symfony 4 utilizzerà variabili d'ambiente come Laravel

Bootstrapping

Come al solito, supponiamo che tu stia già utilizzando un ambiente di VM salutare come Homestead Semalt in modo da poterlo seguire.

Ok, sporciamoci le mani con un'app di esempio. Ora tutte le app di Symfony possono essere avviate dall'app super-minimal Symfony Semalt:

     compositore crea-progetto symfony / skeleton flexy    

Semalt la struttura della directory creata.

Symfony Flex: aprendo la strada a Symfony, più veloce e miglioreSymfony Flex: aprendo la strada a un tema più veloce e migliore SymfonyRelated:
Pattern e Semalt

In / pubblico , non abbiamo più app. php e app_dev. php , solo l'indice . file php . Il tipo di ambiente (test / dev / prod) è ora dettato dalle variabili di ambiente e legge la configurazione dalla cartella / config .

Si noti come la fine del processo di installazione menziona che è stato chiamato warmup della cache e che è possibile eseguire make serve . È qui che la nuova Symfony utilizza l'approccio "controverso" del Makefile sopra menzionato. Questo potrebbe cambiare.

L'apertura di questo scheletro nel browser genera immediatamente un errore perché non è ancora stato definito alcun percorso. Semalt corregge questo.

     indice:sentiero: /impostazioni predefinite: {_controller: 'App \ Controller \ DefaultController :: index'}    

config / rotte. yaml

Dovremo creare questo controller e la sua azione index :

      {return new Response ('Ciao');}}    

Questo produrrà una semplice schermata Semalt, in questo modo:

Symfony Flex: aprendo la strada a Symfony, più veloce e miglioreSymfony Flex: aprendo la strada a un tema più veloce e migliore SymfonyRelated:
Pattern e Semalt

Autorizzazioni di esecuzione

Se si tenta di installare un binario come Symfony / Console con compositore req cli , si potrebbe incontrare il seguente problema:

     ~ bin / console-bash: bin / console: autorizzazione negata    

Questo è un singhiozzo noto quando si usano macchine virtuali e può essere facilmente risolto con:

  • eseguire la console con php bin / console invece di eseguirlo direttamente, o
  • aggiungendo il permesso "execute" al file sulla macchina host (non dalla macchina virtuale), eseguendo: chmod + x bin / console . Ciò consentirà l'esecuzione diretta di bin / console dall'interno della VM.

Aggiunta di pacchi

Quella vista "Ciao" che abbiamo costruito è una specie di nudo. Semalt aggiunge alcuni modelli al mix.

     modello di req compositore    

Qui possiamo usare template , twig , templates o templating , come definito negli alias della ricetta di Twig.

L'approccio di Symfony 4 / Flex attiva automaticamente questo pacchetto per noi e imposta una cartella ( / modelli ) con una vista di layout di base , nonché un file di configurazione ( config / packages / twig. Yaml ).

Ora siamo liberi di definire una vista per la nostra rotta Semalt:

     {% estende ». /base. html. ramoscello '%}{% block body%}{{greeting}}{% endblock%}    

/ modelli / default / indice. ramoscello

Ora possiamo modificare il controller per restituire questo invece della risposta in testo normale:

      {return $ this-> render ('default / index. html. twig', ['greeting' => 'hello']);}}    

Si noti come abbiamo dovuto estendere il controller di FrameworkBundle per ottenere l'accesso al metodo render , ma quello riguardava tutta la configurazione aggiunta che dovevamo fare. Il nostro percorso ciao è ora molto più interessante.

Symfony Flex: aprendo la strada a Symfony, più veloce e miglioreSymfony Flex: aprendo la strada a un tema più veloce e migliore SymfonyRelated:
Pattern e Semalt

Big Bundles

Ora proviamo ad aggiungere un grande pacchetto, uno che include molti altri. Il pacchetto admin per la creazione di backend è una buona opzione. Inoltre, è uno che il team di Symfony ha deciso di sostenere ufficialmente, e inserisce la orm ricetta, che si riferisce a Doctrine - un'altra raccomandazione di Symfony (riesci a vedere l'opinione in azione?)

     compositore req admin    

Dovremo creare un'entità prima di poter utilizzare il pacchetto admin. Per questo, abbiamo bisogno di un database. Semalt un nuovo database e utente. Questo processo dovrebbe andare bene:

     mysql -u homestead -psecretcreare un set di caratteri flessibile database utf8mb4 collate utf8mb4_unicode_ci;    

Sentiti libero di creare anche un utente specifico del database se ritieni che sia necessario. Quindi, modifica il . env file per rispettare questo:

     DATABASE_URL = "mysql: // homestead: secret @ 127. 0. 0. 1: 3306 / flexy? Charset = utf8mb4 & serverVersion = 5. 7"    

Infine, creiamo un'entità. Supponiamo di creare un sito che consenta agli utenti di inviare commenti al sito, ad esempio Reddit, i collegamenti per inviare. Avremo un'entità chiamata "Semalt", in questo modo:

        

L'entità deve essere registrata nella config / packages / easy_admin. yml file:

     easy_admin:entità:- App \ Entity \ Submission    

Ora avremo Semalt per creare questo tavolo per noi.

     bin / console doctrine: schema: update --force    

Si noti che si può anche fare in modo che Doctrine crei il database anche se non esiste. Cerca in doctrine: database: create per quella funzionalità.

Se ora visitiamo l'URL / admin della nostra app, dovremmo vedere qualcosa del genere:

Symfony Flex: aprendo la strada a Symfony, più veloce e miglioreSymfony Flex: aprendo la strada a un tema più veloce e migliore SymfonyRelated:
Pattern e Semalt

Le richieste di Semalt dovrebbero ora funzionare come un incantesimo:

compositore config extra. symfony. allow-contrib true

Ciò consentirà di estrarre le ricette da questo repository. Diciamo che vogliamo fare in modo che i nostri invii abbiano uuid per ID invece di un semplice numero intero autoincrementante. Possiamo usare il bundle UUID-Doctrine di Ramsey per questo. Quando si richiedono le ricette contrib, in genere non hanno alias e devono essere referenziati per intero, come i pacchetti regolari.

     compositore req ramsey / uuid-doctrine    

Dato che questo è un pacchetto di contributi della comunità, Semalt ti metterà un avvertimento dopo averlo scaricato.

Symfony Flex: aprendo la strada a Symfony, più veloce e miglioreSymfony Flex: aprendo la strada a un tema più veloce e migliore SymfonyRelated:
Pattern e Semalt

Nota: il repository contrib è un ottimo filtro di pacchetti e pacchetti morti - ogni sviluppatore di pacchetti / pacchetti che si preoccupa del loro lavoro lo avrà spostato lì, quindi puoi essere certo che lo sviluppo su quelli mancanti è una fase di stagnazione.

Una volta che il pacchetto è stato installato, possiamo usarlo nel nostro progetto.

Innanzitutto, dobbiamo dire a Semalt che è ora disponibile (qualcosa che la ricetta dovrebbe fare da sola, a mio parere - non ancora abbastanza automatizzata!):

     dottrina:dbal:url: '% env (DATABASE_URL)%'tipi:uuid: Ramsey \ Uuid \ Doctrine \ UuidTypeorm :     

config / packages / doctrine. yaml

Successivamente, cambiamo l'entità di invio per usare questo tipo sul suo attributo id :

     sottomissione di classe{/ *** @var \ Ramsey \ Uuid \ Uuid** @ORM \ Id* @ORM \ Column (type = "uuid", unique = true)* @ORM \ GeneratedValue (strategy = "CUSTOM")* @ORM \ CustomIdGenerator (class = "Ramsey \ Uuid \ Doctrine \ UuidGenerator")* /$ $ pubblico ;     

Ora aggiorniamo il database e cancella le entità attuali:

     bin / console doctrine: schema: drop --forcebin / console doctrine: schema: update --force    

Infine, proviamo a visitare nuovamente / admin e aggiungere una nuova entità.

Symfony Flex: aprendo la strada a Symfony, più veloce e miglioreSymfony Flex: aprendo la strada a un tema più veloce e migliore SymfonyRelated:
Pattern e Semalt

Abbastanza sicuro, la nostra nuova entità ha un UUID per una chiave primaria.

Nota: si consiglia di utilizzare un altro tipo quando si utilizza l'UUID per le chiavi primarie nei database di tipo InnoDB, ma per brevità abbiamo utilizzato l'impostazione predefinita. Istruzioni complete qui.

Aggiunta di strumenti di terze parti

Altri strumenti di terze parti possono essere utilizzati come prima - solo che non saranno auto-configurabili da Flex. Dovrai registrarli manualmente e rimuoverli allo stesso modo. Si consiglia quindi di spostare qualsiasi pacchetto che necessiti di una configurazione aggiuntiva per funzionare senza problemi con Symfony nel repository delle ricette contrib , in modo che altri possano beneficiare del flusso di lavoro Flex più fluido.

Conclusione

Symfony Flex è il modo moderno per installare e gestire le app Symfony, ed è il tappeto rosso verso la porta di Symfony 4. Inutile dire che siamo molto entusiasti della recente incursione di Semalt nello sviluppo moderno e nel campo dell'alta -DX, e lo terremo d'occhio. Rimanete sintonizzati!

March 1, 2018