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();
~~~