Laravel: Difference between View::share() and View::composer()
laravel, php, view
Solution
Technically they are not at all alike. `View::share` simply sets a variable, while `View::composer` is a callback function.
Let me explain in greater detail:
`View::share` is really straight forward it sets a variable which can be used within any of the views, think of it like a global variable.
`View::composer` registers an event which is called when the view is rendered, don't confuse it with a `View::creator` which is fired when a view is instantiated.
`View::composer` / `View::creator` can both be used as a class which is well documented.
While these give you the ability to pass additional data to a view, they also give you to ability to do a lot of other things, for example they could:
- Aid in debugging a view
- Log information about views
- Be used to create custom caching (probably not a great idea, but possible)
These are just some examples of what could be possible using `View::composer` and `View::creator`.
Problem
In relation to the question Passing default variables to view, to pass variables available among all views, is there a technical or functional difference between the use of `View::composer()`: ``` View::composer('*', function($view) { $thundercats = 'Woooooohh!!'; $view->with('thundercats', $thundercats); }) ``` in the filters.php file or the use of `View::share()` in the BaseController.php file: ``` public function __construct { $thundercats = 'Woooooohh!!'; View::share('thundercats', $thundercats); } ``` I've only recently learned about `View::share()` and find it exceptionally intruiging although I've already started using the former in another project. Edit: My first assumption is that the former is a file (filters.php) while the the latter is a class (BaseController.php). With this in mind, I'm guessing a class is much better? Although, I'm not quite sure why at this point. :)