A view is named by its path under resources/views, with dots for slashes: view('products.show') loads products/show.blade.php, and php artisan make:view products.compare creates one. The array keys become template variables, and ->with('key', $value) adds more. Until Eloquent arrives in Eloquent Models, a catalog() helper returns three plain objects, and the product route ends with return view('products.show', compact('product')), the same as passing ['product' => $product].
View::share('freeShipping', '$75') in AppServiceProvider::boot() reaches every view; a view composer (View::composer('partials.nav', ...)) supplies data only when that view renders, and View::first([...]) renders the first view that exists. Keep queries out of templates: SQL in a loop is where the N+1 problem of Eager Loading begins.