anlutro/laravel-settings

Auto Save not working

egknight opened this issue · 4 comments

I have added \anlutro\LaravelSettings\SaveMiddleware::class, to middleware in Kernel.php but autosave is not working in http request. I am using database for storage. Saves work using Setting::save();

I can't reproduce this on a fresh Laravel 5.5 install. Maybe other serviceproviders are interfering somehow?

I am using fresh laravel install.

laravel new test
cd test
composer require anlutro/l4-settings
php artisan vendor:publish --provider="anlutro/l4-settings" --tag="config"

Open up app/Http/Kernel.php

    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
        \App\Http\Middleware\TrustProxies::class,
        \anlutro\LaravelSettings\SaveMiddleware::class,
    ];

Open up routes/web.php

Route::get('/', function () {
	Setting::set('foo', 'bar');
	dd(Setting::get('foo', 'default value'));
    return view('welcome');
});

returns "bar"

Route::get('/', function () {
	// Setting::set('foo', 'bar');
	dd(Setting::get('foo', 'default value'));
    return view('welcome');
});

Would expect "bar" but returns "default value"

Thanks

I think that's because you are calling dd which will cause PHP to terminate, so the middleware's terminate method never gets called.

Yes, I've removed that and tested by passing data to a view and it works as expected.