Oznámení
Problém s překladem entit
před 5 lety
- jakubdvorak
- Člen | 7
Zdravím,
prosím o pomoc – pokouším se ve vlastním CMS rozchodit tento návrh překladů entit: https://gist.github.com/Tharos/6266039 . Vše funguje do chvíle, kdy se z jedné TranslatableEntity snažím přistoupit na druhou TranslatableEntitu, která je s původní ve vztahu.
Entita vypadá následovně:
/**
* @property int $id
* @property Articles|null $parent m:hasOne(parent)
* @property Users|null $users m:hasOne(users_id)
* @property string|null $title m:translatable
* @property string|null $content m:translatable
* @property string|null $meta_keyword m:translatable
* @property string|null $meta_description m:translatable
* @property bool $public
* @property bool $showInMenu (show_in_menu)
* @property \DibiDateTime $last_edit
* @property Galleries|null $gallery m:hasOne(galleries_id)
* @property int $menu_position
*/
class Articles extends TranslatableEntity
{
}
Když se nyní pokusím zavolat:
$entity->parent !== NULL ? $entity->parent->id : NULL
Zahlásí LM chybu:
Cannot get value of property 'parent' in entity CMS\Model\Articles due to low-level failure: Argument 3 passed to CMS\Model\Filter\Translator::translate() must be an instance of CMS\Model\Languages, none given
Pochopil jsem, že když se pokusím způsobem $entity->parent->cokoliv přistoupit na další entitu, nepředá se poslední parametr metody CMS\Model\Filter\Translator::translate( Fluent $statement, $table, Lang $lang )
Mám LeanMapper v. 2.2.0 a celé to běží v Nette 2.2.2
Předem díky za jakoukoliv radu! :)
Editoval jakubdvorak (8. 7. 2014 17:25)
před 5 lety
- Tharos
- Člen | 1042
Podívej se na Mapper v tom ZIP balíčku, je v něm
getImplicitFilters
, které mi v tom Gistu asi nějak
vypadlo…
Důležité je, aby se při traverzování mezi entitami aplikoval filtr
translateFromEntity
, který má ten třetí parametr volitelný.
Pokud není uveden, hledá se jazyk v té entitě, ze které se traverzuje.
U Tebe se při traverzování mezi entitami aplikuje filtr
translate
, což způsobuje Tebou popsanou chybu.
před 5 lety
- jakubdvorak
- Člen | 7
Ahoj,
v tvé ukázce je zřejmě chyba v podmínce getImplicitFilters:
if ($caller instanceof Entity) {
Takto funguje:
if ($caller->getInstance() instanceof Entity) {
Ještě bych se zeptal, v metodě translateFromEntity, co doporučuješ dát jako akci v případě, že třída není potomkem TranslatableEntity? Načtení toho defaultního jazyka jak píšeš v todo? V jakých případech to vlastně může nastat, že je translateFromEntity zavoláno tak, že $entity není instancí TranslatableEntity?
Díky moc