Triggermethode in PHP
bearbeitet von 1unitedpower> > Ist das eine homegrown Library oder irgendetwas, das man kennen könnte?
> 
> Nein. Eine eigene Lösung
Ist der Quelltext irgendwo einzusehen?
> Könntest du das mal genauer beschreiben? Ich habe ja schon eine "Übersetzungsschicht" zwischen den ORM-Klassen und der Datenbankklasse
Schwierig ohne deinen Code zu kennen, aber ich versuch mal ein Beispiel zu geben, ich gehe davon aus, dass du eine Klasse `Model` in deinem ORM hast. Ein Proxy für das Model, würde auf der Model-Klasse aufbauen, und sie um Mehrsprachigkeit erweitern.
~~~php
class I18NProxy {
    protected model;
    public function __construct(Model $model) {
        $this->model = $model;
    }
    public function __get(string $name) {
        if ($this->model instanceof I18N && $this->model->canTranslate($name)) {
            return $this->model->translate($name);
        } else {
            return $this->model->__get($name);
        }
    }
}
interface I18N {
    public function canTranslate(string $name) : boolean;
    public function translate(string $name);
}
~~~
Angenommen bisher hast du einen Aufruf `$model->greeting` um eine englische Begrüßungsformel zu erhalten, müsstest du nun folgedes schreiben, um eine übersetze Begrüßungsformel zu erhaten:
~~~php
$greeting = (new I18NProxy($model))->greeting;
~~~
Triggermethode in PHP
bearbeitet von 1unitedpower> > Ist das eine homegrown Library oder irgendetwas, das man kennen könnte?
> 
> Nein. Eine eigene Lösung
Ist der Quelltext irgendwo einzusehen?
> Könntest du das mal genauer beschreiben? Ich habe ja schon eine "Übersetzungsschicht" zwischen den ORM-Klassen und der Datenbankklasse
Schwierig ohne deinen Code zu kennen, aber ich versuch mal ein Beispiel zu geben, ich gehe davon aus, dass du eine Klasse `Model` in deinem ORM hast. Ein Proxy für das Model, würde auf der Model-Klasse aufbauen, und sie um Mehrsprachigkeit erweitern.
~~~php
class I18NProxy {
    protected model;
    public function __construct(Model $model) {
        $this->model = $model;
    }
    public function __get(string $name) {
        if ($this->model instanceof I18N && $this->model->canTranslate($name)) {
            return $this->model->translate($name);
        } else {
            return $this->model->__get($name);
        }
    }
}
interface I18N {
    public function canTranslate(string $name) : boolean;
    public function translate(string $name);
}
~~~
Angenommen bisher hast du einen Aufruf `$model->greeting()` um eine englische Begrüßungsformel zu erhalten, müsstest du nun folgedes schreiben, um eine übersetze Begrüßungsformel zu erhaten:
~~~php
$greeting = (new I18NProxy($model))->greeting();
~~~
 nicht angemeldet
 nicht angemeldet