Dipende principalmente dalla qualità dei pacchi. E questo quanto sono connessi.
Rifiuterei il punto 3 all'inizio (create different Symfony2 project for admin area and api.
), poiché probabilmente non si creano due applicazioni separate.
Avere kernel multiplo per diverse parti di applicazione (API, admin e il sito di base)
problema comune è creato da ascoltatori e servizi in un contenitore. Soprattutto quando il listener dovrebbe funzionare solo in uno dei contesti dell'app (api/frontend/backend). Anche se ti ricordi di controllarlo all'inizio del metodo listener (e fai magie solo nel contesto desiderato), l'ascoltatore ancora può dipendere dai servizi iniettati che devono comunque essere costruiti e iniettati. Un buon esempio qui è FOS/RestBundle: anche se si configura zones
quindi ancora su frontend (quando view_listener
è attivato per API) view_handler
viene inizializzato e iniettato nell'ascoltatore - https://github.com/FriendsOfSymfony/FOSRestBundle/blob/master/Resources/config/view_response_listener.xml#L11 Non sono sicuro per il 100% qui ma anche disabilitando le traduzioni e il ramoscello (ecc.) per API (la maggior parte delle API non ne ha bisogno) lo accelera.
La creazione di un kernel separato per il contesto dell'API risolverebbe questo problema (nel nostro progetto utilizziamo un kernel e abbiamo dovuto disabilitare quel listener, poiché i profili di blackfire.io ci dicevano che salva ~ 15ms su ogni richiesta frontata).
La creazione di un nuovo kernel per API garantisce che nessuno dei servizi/ascoltatori solo dell'API non interferisca con il rendering di frontend/backend (funziona in entrambi i modi). Ma creerà per te un ulteriore lavoro di creazione di components
condiviso in molti pacchetti all'interno del progetto (quelli provenienti da diversi kernel) - ma nel mondo con il compositore non è più un compito enorme.
Ma è il caso solo per le persone che misurano ogni millisecondo di tempo di risposta. E dipende dalla qualità dei pacchetti/3dparty.Se tutto è perfettamente a posto, non è necessario pasticciare con i Kernel.
fonte
2016-02-25 16:30:58
si può provare a creare environnement per fare questo follow dev exemple per fare questo, se (in_array '($ this-> getEnvironment(), array ('dev', 'test'))) {'nell'appKernel – pietro
Cosa ne pensi del mio commento precedente? – pietro
La tua opzione dimenticata: codice diviso in diversi pacchetti, era già stato discusso qui: [Tutto dovrebbe essere davvero un pacchetto in Symfony 2.x?] (Http://stackoverflow.com/q/9999433/2257664) o [Symfony2 problema concettuale: bundle generali e specifici) (http://stackoverflow.com/q/8012191/2257664). –