2013-07-09 4 views
5

Voglio creare il mio CMS personalizzato e vorrei creare un pacchetto utente in cui avrò un controller con funzione showProfile(). Ma il problema è che mi piacerebbe modificare facilmente questa vista profilo. Quindi voglio sapere se c'è un modo per creare una vista a cascata. Come se non ci fosse nessun file in app/views/allora il venditore/venditore/pacchetto/src/viste saranno caricati. Io spero tu abbia questa idea :)Override Laravel 4 Visualizzazione pacchetto

EDIT:

sono riuscito a farlo funzionare. Ho dovuto registrare un nuovo spazio dei nomi per le viste nel mio ServiceProvider. ho messo questo codice per ServiceProvider:

\View::addNamespace('cmscore',array(app_path()./'views/packages/zaalbarxx/cmscore'); 

Dove zaalbarxx/cmscore è vendor/pacchetto e cmscore è uno spazio dei nomi che posso utilizzare in seguito nel regolatore come View :: rendere ('cmscore :: index'). Ho aggiunto questo codice nel metodo boot() PRIMA di $ this-> package() in questo modo app/views hanno la priorità su pacchetto/viste. Funziona brillante.

+0

Buona ricerca, grazie per aver pubblicato come oluzione – fideloper

risposta

4

È già possibile, tuttavia la struttura dovrebbe essere visualizzata in vendor/package-name/src/views per impostazione predefinita, ma se è presente l'equivalente in app/views/packages/package-name/ che verrà scelto.

2

Come indicato, dovresti essere in grado di caricare già le viste del pacchetto.

Tuttavia, è possibile aggiungere più posizioni di visualizzazione nell'array trovato in app/config/view.php.

È inoltre possibile aggiungere percorsi di visualizzazione aggiuntivi in ​​fase di esecuzione con il metodo addLocation() trovato nella classe FileViewFinder.

Utilizzando questo metodo che in un fornitore di servizi sarebbe simile:

$app['view.finder']->addLocation('/path/to/views'); 

o in qualsiasi parte vostra applicazione:

App::make('view.finder')->addLocation('/path/to/views'); 

Si noti inoltre, risposi this question on cacheing view output di recente, che potrebbe aiutare a vedere come estendere alcune parti del pacchetto View potrebbe funzionare se si sceglie di percorrere questa rotta.

+0

Si noti che la vista del pacchetto può essere collegata in cascata a 'app/views' sin da ora, poiché questa posizione è codificata da' Illuminate \ Support \ ServiceProvider :: package() '. – crynobone

+0

Sì, non ho alcun problema con il caricamento di viste da determinati pacchetti. Ma vorrei creare solo una semplice vista nel pacchetto e quindi avere la possibilità di spostarlo in app/viste ed estenderlo. O dovrei semplicemente non creare la vista nel pacchetto e costringere l'utente a creare file in app/viste per poter utilizzare questo metodo di controllo profile()? –

0

Non è necessario programmare questo comportamento in, se si legge il codice laravel si vedrà che questo è costruito in ...

pacchetti di default cercherà prima e app/views/packages/package-name/ (tutto in minuscolo ! anche se pacchetto o autore hanno i cappucci! passa inosservato su Windows e poi su linux ti sbattere la testa contro il muro!)

e se la vista dell'app cliente non esiste le viste del pacchetto verranno caricate dal pacchetto stesso all'interno: vendor/author/package-name/src/views

+2

Si noti che il percorso personalizzato non è '... packages/package-name ...' ma piuttosto '... packages/vendor/package-name ...' (notare la parte ** vendor **).È possibile pubblicare le viste del pacchetto per la modifica utilizzando il comando 'php artisan view: publish vendor/package'. Documenti: http://laravel.com/docs/4.1/packages#package-views –

+0

Un altro trucco: il comando 'view: publish' a volte crea cartelle in title case, ad es. 'App/views/pacchetti/Venditore/package'. Ma questo potrebbe non essere rilevato dal server e potrebbe essere necessario rinominare la cartella in ".../vendor/package". –