2011-09-28 14 views
8

Ho iniziato a creare un sito Web con Symfony2 e ho avuto un po 'di imbarazzo sulle risorse.Dove mettere le risorse principali in Symfony2?

Il libro Symfony2 dice che ogni file di risorse deve essere in un pacchetto, ma per quanto riguarda le immagini più essenziali, i file .js e .css che uso nel file base.html.twig su ogni pagina?

Devo creare un CoreBundle o qualcosa di simile, solo per questi file, o dovrei metterli nella cartella app \ Resources (o direttamente nella cartella web, forse)? Se posso usare la cartella app \ Resources per questi, come posso fare riferimento a questi file dal modello?

Creare un pacchetto solo per questo sembra un po 'inutile, e anche gli URL di risorse per questi file sono brutti (ad esempio' /bundles/projectcore/images/logo.jpg ') a mio parere.

Qual è la migliore pratica qui?

risposta

6

Ho avuto situazioni in cui ho mantenuto tutti i file in/web (cioè/web/js) e altri in cui li ho tenuti all'interno di un pacchetto "Asset".

Se si sta sviluppando un pacchetto che verrà riutilizzato in numerosi progetti, è opportuno archiviare le risorse in tale pacchetto. Penso che dovresti pubblicare/installare tali risorse nella cartella web usando la riga di comando. Ad esempio, supponiamo che tu abbia un BlogBundle che richiede css specifici. Dovresti memorizzare il css in quel pacchetto, quindi la volta successiva che utilizzerai BlogBundle per un progetto potresti facilmente riutilizzare il css.

Come con molte altre cose con Symfony2, le tue preferenze personali giocano un ruolo importante in queste decisioni. Raccomando di rimanere coerenti con il punto in cui memorizzi le tue risorse. Dovendo gestire le risorse suddivise in tre diversi siti (web, AssetsBundle, altri bundle) potrebbe essere un grosso problema. Quindi scegli un luogo e cerca di rimanere coerente.

Per quanto riguarda l'accesso alle risorse da app/risorse ... potresti essere in grado di utilizzare Assetic per questo. Non ho molta familiarità con esso, ma credo che tu possa caricare risorse da qualsiasi luogo all'interno del tuo progetto. In realtà raccomanderei di dare un'occhiata al codice principale di Assetic (guarda in vendor\Assetic) al posto dell'assistente di Symfony2 Assetic perché avrai un'idea migliore di ciò che è possibile.

+0

Penso che potrò rendere AssetsBundle per l'archiviazione di queste risorse, è comunque mantenibile che metterle tutte nella cartella web (specialmente se voglio riutilizzare queste risorse in un altro progetto). Grazie per la risposta! – banrobert

2

Abbiamo usato un link simbolico in Linux in modo che/web/fasci/projectcore/images punti da src/Bundle/Resources/public/immagini

con Subversion in NetBeans, funziona. La cosa bella è che tutta la tua applicazione rimane nella cartella/src/Bundle

+3

Per completezza, questo può essere ottenuto con l'esecuzione di 'app php/console: installa web --symlink' nella directory del progetto Symfony2. – richsage

+0

Sono su Windows, quindi symlink non è un'opzione per me :) Comunque, grazie! – banrobert

+1

@banrobert symlink funziona anche su Windows – Inoryy

Problemi correlati