Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Override Laravel 4 Package view

I want to create my custom CMS and I'd like to create a user package in which I will have a controller with showProfile() function. But the problem is I'd like to easily edit this profile view. So I want to know if there is a way to create cascade view. Like if there is no file in app/views/ then vendor/vendor/package/src/views will be loaded. I hope you got this idea :)

EDIT:

I managed to make it work. I had to register new namespace for views in my ServiceProvider. I put this code to ServiceProvider:

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

Where zaalbarxx/cmscore is vendor/package and cmscore is a namespace I can use later in controller like View::make('cmscore::index'). I added this code in boot() method BEFORE $this->package() so this way app/views are prioritized over package/views. Works brilliant.

like image 513
Maksym Avatar asked Jul 09 '13 10:07

Maksym


2 Answers

It is already possible, however the structure would be it look into vendor/package-name/src/views by default, but if there is the equivalent in app/views/packages/package-name/ that would be chosen.

like image 135
crynobone Avatar answered Sep 27 '22 18:09

crynobone


As stated, you should be able to load package views already.

However, you can add more view locations in the array found in app/config/view.php.

Additionally view paths can be added at run-time with the addLocation() method found in the FileViewFinder class.

Using that method that in a service provider would look like:

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

Or anywhere in your app:

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

Also note, I answered this question on cacheing view output recently, which might help you see how extending some portions of the View package might work if you choose to go down that route.

like image 20
fideloper Avatar answered Sep 27 '22 19:09

fideloper