Ich habe eine Laravel-App, die einige Konfigurations-Vars benötigt, die von den meisten meiner Controller verwendet werden müssen. Daher scheint es, als wäre dies der perfekte Zeitpunkt für die Verwendung von Middleware. Ist dies die korrekte Verwendung von Middleware? Wenn ja, sobald die Middleware die Config-Vars erhält, ist es die beste Vorgehensweise, diese zum Request-Objekt hinzuzufügen, damit sie von meinem Controller angesprochen werden können? Danke an alle Antwortenden. JSollte ich Laravel Middleware verwenden?
Antwort
IMO, Middlewares sind für Vorverarbeitungsanforderungen gemacht, beschränken den Benutzerzugriff und andere sicherheitsrelevante.
Ich würde einfach die Konfiguration in der Haupt-Controller-Klasse laden und es in den erweiternden Controller verwenden.
Zum Beispiel:
Basis-Controller
namespace App\Http\Controllers;
uses goes here ...;
class Controller extends BaseController
{
protected $configs = [];
public function __construct() {
$this->loadConfigs();
}
protected function loadConfigs()
{
//read configuration files or tables in database
//and put the values into '$this->configs';
}
}
Benutzer Controller
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class User extends Controller
{
public function index()
{
echo $this->configs['toolbar.color']; //just an example
}
}
Middleware existiert, um Bedingungen zu überprüfen, bevor Anfragen an Ihre Controller gelangen. Sie dienen zur Vorverarbeitung ** und ** Nachbearbeitung. Es ist nicht sicherheitsrelevant, es ist bedingt (eine Bedingung kann sein "Benutzer muss authentifiziert werden.) Es kann verwendet werden, um Variablen und alles zu setzen, bevor Anfrage den Controller erreicht. Dieser Kommentar ist hier, um Ihre Aussage über Middleware zu betonen –
Perfect vielen Dank Carlos, das macht Sinn, also verwenden Sie im Grunde nur Middleware zum Filtern und stellen Sie die Logik, die von den meisten meiner Controller in einem Basiscontroller benötigt werden. Das sitzt gut in meinem Kopf :) – jon
Obwohl ich sehe, dass NB nicht einverstanden ist. Also NB würden Sie meine Anforderungen als Middleware hinzufügen? – jon
nicht, auf jeden Fall!
Eigentlich (am besten Sie haben geschrieben), ist der beste Weg zu gehen, einen Anwendungsdienst zu erstellen und diesen Service auf Service Container zu registrieren - App\Providers\AppServiceProvider
(in app/Providers/AppServiceProvider.php
).
Etwas wie folgt aus:
<?php
# The Config Service:
namespace App\Services;
/**
* Config Manager
*/
class Config
{
/** @var SomeDependency */
protected $dependency;
public function __construct(SomeDependency $dependency)
{
$this->dependency = $dependency;
}
public function getVar($var)
{
// ...
}
}
In der Service-Provider:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
//...
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->registerConfigManager();
}
public function registerConfigManager()
{
$this->app->singleton('config_service', function ($app) {
return new \App\Services\Config(new \SomeNamespace\SomeDependency);
});
}
//...
}
Und jetzt können Sie über app()
den Service-Container zuzugreifen, wie folgt aus:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class MyController extends Controller
{
public function index(Request $request)
{
app('config_service')->getVar('key');
//...
}
}
Dank felipsmartins, Sind sich andere einig, dass dies eine gute Zeit wäre, einen Dienstleister zu nutzen? – jon
es ist eine gute Lösung – CarlosCarucce
@jon Eigentlich ist es nicht erforderlich, einen Dienstanbieter zu erstellen, sondern nur eine Klasse erstellen und registrieren Sie es dann als Anwendungsdienst in Container. Das ist einfach und ein guter Weg. – felipsmartins
- 1. Laravel Middleware
- 2. Laravel: spezifische Middleware nach Auth Middleware ausführen
- 3. Multi Auth für Laravel 5.2 Middleware verwenden
- 4. Sollte ich eine GZIP-Komprimierungs-Middleware verwenden oder nicht?
- 5. Middleware überschreibt andere Middleware in Laravel
- 6. Laravel Middleware-Parameter innerhalb einer Middleware-Gruppe
- 7. Ionic Middleware wie Laravel
- 8. Middleware Route Laravel
- 9. Laravel - Warum Middleware übersprungen werden?
- 10. Dynamische Middleware für Laravel 5
- 11. Middleware und Benutzer - Laravel 5
- 12. Laravel - Leere $ Anfrage nach Middleware
- 13. Laravel Middleware Rückgabevariable zum Controller
- 14. Laravel Middleware Änderung Antwort Inhalt
- 15. Laravel: Unterschied zwischen Route Middleware und Politik
- 16. Sollte ich in Laravel "ansesTo" oder "hasOne" verwenden?
- 17. Laravel 5.2.x spezifische Middleware deaktivieren
- 18. Sollte ich jQuery.inArray() verwenden?
- 19. Sollte ich Fremdschlüssel verwenden?
- 20. Sollte ich Bootstrap verwenden?
- 21. Sollte ich jQuery.each() verwenden?
- 22. Wie man Laravel 5 Middleware Auth einstellen?
- 23. Wie sollte ich Unit-Test-Middleware-Pakete mit Gorilla Kontext
- 24. Middleware-Funktionalität von Laravel in AngularJS?
- 25. Wie verwende ich Middleware in Laravel für sichere Controller?
- 26. Zuweisen von Middleware zu Routen in Laravel
- 27. Laravel ausschließt Route in verschachtelter Middleware Gruppe
- 28. Verständnis Laravel ‚Auth‘ und ‚Web‘ Middleware
- 29. Laravel Middleware außer mit Route :: group
- 30. Laravel Middleware erkannt, aber nicht ausgeführt
Sind die config vars statisch oder dynamisch. – whoacowboy
Sobald sie in der Middleware definiert wurden, sind sie statisch. – jon
Können Sie weitere Informationen dazu hinzufügen, wofür Sie die Variablen verwenden, wie lange sie dauern usw. – whoacowboy