Templatevariablen in app/Providers auslagern

Posted in Laravel, 25.01.2017 13:01

Wenn Variablen in mehreren Views gebraucht werden, könnte man die über den Konstruktor erstellen und dann jeweils der View-Funktion mitgeben, dann muß aber doch jedesmal die Templatevariable neu mitgegeben werden.

Noch einfacher geht es, wenn man das auf einen Serviceprovider (z.B. app/Providers/AppServiceProvider.php) auslagert. Man kann hierfür auch extra einen erstellen (php artisan make:provider ViewComposer), muß ihn dann aber auch in der config/app.php anmelden!

Damit dem posts.blade.php jedesmal die Variable "categories" mitgegeben wird, muß der AppServiceProvider z.B. so aussehen:

namespace blog\Providers;

use Illuminate\Support\ServiceProvider;
use blog\Models as Models;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
         view()->composer('posts', function($view) 
        { 
            $view->with('categories', Models\blog_categories::getCategoriesWithCount());
            
        });
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

Quelle: https://laracasts.com/series/laravel-5-fundamentals/episodes/25