2013-07-09 22 views
5

Ich möchte mein benutzerdefiniertes CMS erstellen und möchte ein Benutzerpaket erstellen, in dem ich einen Controller mit der showProfile() - Funktion haben werde. Aber das Problem ist, ich möchte diese Profilansicht einfach bearbeiten. Ich möchte also wissen, ob es eine Möglichkeit gibt, eine Kaskadenansicht zu erstellen. Wenn keine Datei in app/views/vorhanden ist, wird der vendor/vendor/package/src/views geladen. Ich hoffe, dass Sie diese Idee :)Laravel überschreiben 4 Paketansicht

EDIT:

ich es geschafft, damit es funktioniert. Ich musste neuen Namespace für Ansichten in meinem ServiceProvider registrieren. Ich habe diesen Code zu Serviceprovider:

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

Wo zaalbarxx/cmscore ist Verkäufer/Paket und cmscore ist ein Namespace ich später in der Steuerung wie Ansicht verwenden können :: machen ('cmscore :: Index'). Ich habe diesen Code in der boot() - Methode BEFORE $ this-> package() hinzugefügt, so dass app/views gegenüber Paketen/Views priorisiert werden. Funktioniert brilliant.

+0

Gut gefunden, danke für das Posten als Solution – fideloper

Antwort

4

Es ist bereits möglich, aber die Struktur wäre es in vendor/package-name/src/views standardmäßig aussehen, aber wenn es das Äquivalent in app/views/packages/package-name/, die gewählt werden würde.

2

Wie bereits erwähnt, sollten Sie bereits Paketansichten laden können.

Sie können jedoch weitere Anzeigepositionen im Array in app/config/view.php hinzufügen.

Zusätzlich können Ansichtspfade zur Laufzeit mit der addLocation()-Methode in der FileViewFinder-Klasse hinzugefügt werden.

diese Methode verwenden, die in einem Service-Provider aussehen würde:

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

Oder überall in Ihrer Anwendung:

this question on cacheing view output
App::make('view.finder')->addLocation('/path/to/views'); 

Beachten Sie auch, antwortete ich vor kurzem, die Ihnen helfen könnten sehen, wie Die Erweiterung einiger Teile des View-Pakets funktioniert möglicherweise, wenn Sie diese Route herunterfahren.

+0

Beachten Sie, dass die Paketansicht ab jetzt nur noch in "app/views" kaskadiert werden kann, da dieser Ort fest von 'Illuminate \ Support \ ServiceProvider :: package()' codiert ist. – crynobone

+0

Ja, ich habe kein Problem mit dem Laden von Ansichten aus bestimmten Paketen. Aber ich möchte nur einfache Ansicht im Paket erstellen und dann die Fähigkeit haben, es in App/Ansichten zu verschieben und zu erweitern. Oder sollte ich einfach keine Ansicht im Paket erstellen und den Benutzer zwingen, eine Datei in App/Ansichten zu erstellen, um diese Profil() - Controller-Methode zu verwenden? –

0

Sie müssen dieses Verhalten nicht in programmieren, wenn Sie den Laravel Code lesen, werden Sie sehen, dass diese eingebaut ist ...

Pakete standardmäßig wird zuerst in aussehen und app/views/packages/package-name/ (alle in Klein ! selbst wenn Paket oder Autor Caps haben! unnoticed auf Windows und dann auf Linux stoßen Sie Ihren Kopf gegen die Wand!)

und wenn die Ansicht der Kundenanwendung nicht existiert, laden die Paketansichten vom Paket sich innen: vendor/author/package-name/src/views

+2

Beachten Sie, dass der benutzerdefinierte Pfad nicht '... packages/package-name ...' ist, sondern '... packages/vendor/package-name ... '(beachten Sie den Teil ** vendor **).Sie können Paketansichten zur Änderung mit dem Befehl 'php artisan view: publish vendor/package 'veröffentlichen. Docs: http://laravel.com/docs/4.1/packages#package-views –

+0

Ein anderer Fehler: 'view: publish' Befehl manchmal erstellen Ordner im Titel Fall, z. 'app/views/packages/Anbieter/Paket'. Dies kann jedoch nicht vom Server übernommen werden und Sie müssen den Ordner möglicherweise in '.../vendor/package' umbenennen. –