2013-07-09 21 views
5

Chcę utworzyć niestandardowy system CMS i chcę utworzyć pakiet użytkownika, w którym będę miał kontroler z funkcją showProfile(). Problem polega jednak na tym, że chciałbym łatwo edytować ten widok profilu. Więc chcę wiedzieć, czy istnieje sposób na stworzenie widoku kaskadowego. Podobnie jak w przypadku braku pliku w app/views /, ładowany jest plik vendor/vendor/package/src/views. Mam nadzieję, że masz ten pomysł :)Przesłoń widok pakietu Laravel 4

EDIT:

udało mi się tego dokonać. Musiałem zarejestrować nową przestrzeń nazw dla widoków w moim ServiceProvider. mogę umieścić ten kod do ServiceProvider:

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

Gdzie zaalbarxx/cmscore jest sprzedawca/pakiet i cmscore jest nazw mogę użyć później w kontrolerze jak zobaczyć :: dokonać ('cmscore :: index'). Dodałem ten kod w metodzie boot() PRZED $ this-> package(), więc w ten sposób aplikacja/widoki mają priorytet nad pakietem/widokami. Działa genialnie.

+0

Dobre znalezisko, dzięki za publikację jako olution – fideloper

Odpowiedz

4

Jest to już możliwe, jednak domyślnie domyślnie będzie wyglądać vendor/package-name/src/views, ale jeśli istnieje odpowiednik w , który zostanie wybrany.

2

Jak już wspomniano, powinieneś już mieć możliwość wczytania widoków pakietów.

Można jednak dodać więcej lokalizacji widoku w tablicy znalezionej w app/config/view.php.

Dodatkowo ścieżki widokowe można dodawać w czasie wykonywania za pomocą metody addLocation() znalezionej w klasie FileViewFinder.

Stosując tę ​​metodę, że usługodawca będzie wyglądać następująco:

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

lub w dowolnym miejscu aplikacji:

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

również pamiętać, odpowiedziałem this question on cacheing view output niedawno, co może pomóc zobaczyć, jak rozszerzenie niektórych części pakietu View może działać, jeśli zdecydujesz się na tę trasę.

+0

Zauważ, że widok pakietu może być tylko kaskadowany do 'app/views', ponieważ ta lokalizacja jest zakodowana na stałe z' Illuminate \ Support \ ServiceProvider :: package() '. – crynobone

+0

Tak, nie mam problemu z ładowaniem widoków z określonego pakietu. Ale chciałbym stworzyć prosty widok w pakiecie, a następnie mieć możliwość przeniesienia go do aplikacji/widoków i rozszerzenia. A może po prostu nie mogę utworzyć widoku w pakiecie i zmusić użytkownika do utworzenia pliku w aplikacji/widokach, aby użyć tej metody kontrolera profile()? –

0

Nie trzeba programować to zachowanie, jeśli odczytać kodu laravel widać, że ten jest zbudowany w ...

Pakiety domyślnie najpierw zajrzeć i app/views/packages/package-name/ (wszystko małymi literami nawet jeśli pakiet lub autor mają czapki !, które są niezauważone w oknach, a następnie na Linuksie, uderzysz głową o ścianę!)

Jeśli widok aplikacji klienta nie istnieje, widoki pakietów zostaną załadowane z samego pakietu wewnątrz: vendor/author/package-name/src/views

+2

Należy zauważyć, że niestandardowa ścieżka nie jest '... packages/package-name ...', ale raczej '... packages/vendor/package-name ...' (należy zwrócić uwagę na część ** dostawcy **).Możesz publikować widoki pakietów do modyfikacji za pomocą polecenia 'php artisan view: publish vendor/package'. Dokumenty: http://laravel.com/docs/4.1/packages#package-views –

+0

Kolejne polecenie: polecenie 'view: publish' czasami tworzy foldery w tytule, np. 'app/views/packages/Vendor/Package'. Ale serwer może go nie wykryć i być może trzeba zmienić nazwę folderu na '.../vendor/package'. –