Hallo zusammen,
ich mache gerade meine ersten Schritte mit Silex und habe noch nicht genau verstanden was konkret bei meinem folgenden "Problem" passiert.
Ich verwende Gettext und stelle die Funktion per ServiceProvider bereit. Damit Gettext ordnungsgemäß funktioniert verwende ich setlocal. Ein Fallstrick ist in der PHP Dokumentation beschrieben. Zwischen den einzelnen Seitenaufrufen wechselt die Sprache. Das passiert sobald mehrere Anfragen hintereinander eingehen.
Genau dieses Verhalten bekomme ich sobald ich die Lazy initialization Methode von Silex verwende. Instanziere ich direkt bekomme ich dieses Problem nicht.
Meine Frage ist nun warum das Problem bei Lazy initialization aufritt? Tritt das bei direkter Instanzierung auch auf und ich bemerke es gerade nicht?
Man sollte best practice alles Lazy initalisieren ist das hier möglich? Ausserdem kann ich ohne share nicht auf Parameter zugreifen die ich dem ServiceProvider übergeben habe.
ich mache gerade meine ersten Schritte mit Silex und habe noch nicht genau verstanden was konkret bei meinem folgenden "Problem" passiert.
Ich verwende Gettext und stelle die Funktion per ServiceProvider bereit. Damit Gettext ordnungsgemäß funktioniert verwende ich setlocal. Ein Fallstrick ist in der PHP Dokumentation beschrieben. Zwischen den einzelnen Seitenaufrufen wechselt die Sprache. Das passiert sobald mehrere Anfragen hintereinander eingehen.
Zitat von PHP.net
Meine Frage ist nun warum das Problem bei Lazy initialization aufritt? Tritt das bei direkter Instanzierung auch auf und ich bemerke es gerade nicht?
Man sollte best practice alles Lazy initalisieren ist das hier möglich? Ausserdem kann ich ohne share nicht auf Parameter zugreifen die ich dem ServiceProvider übergeben habe.
PHP-Code:
$app->register(new LanguageProvider(), array(
'language.default' => 'de_DE.utf8',
'language.domain' => 'messages',
'language.path' => __DIR__.'/locale',
)
PHP-Code:
class LanguageProvider implements ServiceProviderInterface {
//...
public function register(Application $app)
{
/**
* Gewünschtes Verhalten jedoch kein $app['language.default'] möglich
*/
$app['language'] = new LanguageController(/**/);
/**
* Falsches Verhalten bei Lazy initialization
*/
$app['language'] = $app->share(function ($app) {
return new LanguageController(/**/);
});
}
PHP-Code:
class LanguageController {
//...
public function __construct(/**/) {
//...
putenv("LANG=$language");
setlocale(LC_ALL, $language);
}
Kommentar