1

J'ai un problème étrange avec mon schéma de doctrine i18n et i.a. le générateur d'administration.Symfony 1.4: Doctrine i18n questions de générateur

(S'il vous plaît regarder la partie d'édition ci-dessous la première)

Le schéma ressemble à:

CargoSize: 
    connection: doctrine 
    actAs: 
    Timestampable:  ~ 
    I18n: 
     fields:     [name, linkname, seoname, description] 
    tableName: com_cargo_size 
    columns: 
    id:          { type: integer(11), notnull: true, unsigned: true, primary: true, autoincrement: true } 
    name:         { type: string(50), notnull: true } 
    linkname:        { type: string(100), notnull: true } 
    seoname:        { type: string(100), notnull: true } 
    description:       { type: string(255), notnull: true } 

Le premier problème que j'ai avec sfForms:

new sfWidgetFormDoctrineChoice(array('model' => 'CargoSize', 'expanded' => true, 'multiple' => false), array('style' => 'list-style-type: none; display: inline;')) 

Cela génère un ensemble radio butten avec les ID corrects, mais les valeurs de nom vides. Même lorsque j'essaie d'obtenir la valeur du nom en sélectionnant directement un objet CargoSize par ID et LANG, getName() renvoie toujours une chaîne vide (le DB est rempli correctement avec des données appropriées).

Alors est-il usé avec la définition du schéma ??

Le deuxième problème apparaît avec l'administrateur générateur:

php symfony doc:generate-admin --module=cargo_size admin CargoSize 

Le generator.yml ressemble:

generator: 
    class: sfDoctrineGenerator 
    param: 
    model_class:   CargoSize 
    theme:     admin 
    non_verbose_templates: true 
    with_show:    false 
    singular:    ~ 
    plural:    ~ 
    route_prefix:   cargo_size 
    with_doctrine_route: true 
    actions_base_class: sfActions 

    config: 
     actions: ~ 
     fields: ~ 
     list: 
     display: [name, lang] 
     filter: ~ 
     form: ~ 
     edit: 
     display: [name] 
     new:  ~ 

La chose drôle est, que la vue de la liste me montre le i18n prénom. Mais en vue d'édition, je reçois toujours l'erreur "nom du widget 'n'existe pas".

Avez-vous une idée de ce qui se passe? Je serais très reconnaissant pour votre aide.

EDIT:

Je pense que le problème se trouve plus profond, parce que ce simple paix de code ne fonctionne note:

D'abord les ensembles de données pour les exemples:

cargo_size 
id created_at    updated_at 
1 2010-04-22 21:37:44  2010-04-22 21:37:44 

cargo_size_translation 
id  name linkname seoname  description  lang 
1  klein klein  klein  klein   de 
1  small small  small  small   en 

$c = Doctrine::getTable('CargoSize')->findOneBy('id', 1); 
echo $c; // (toString exists) 

// Output: Catchable fatal error: Method CargoSize::__toString() 
// must return a string value in 
// /var/www/.../apps/frontend/modules/start/templates/indexSuccess.php on line 1 

echo $c->getName(); 
// Output: nothing 

Est-ce que quelqu'un a une idée? Je suis vraiment deperated :(

Répondre

1

J'ai trouvé le bogue.Pour une raison quelconque, la culture a été définie sur "de_DE" au lieu de simplement "de". Avec ce réglage, le comportement de l'i18n ne fonctionnait pas!

2

Premier problème:

Les « noms de valeurs » affichés sont prises à partir du résultat de la méthode __toString() Vous pouvez ajouter les options « méthode », comme ceci:.

new sfWidgetFormDoctrineChoice(array('model' => 'CargoSize', 'expanded' => true, 'multiple' => false, 'method' => 'getName'), array('style' => 'list-style-type: none; display: inline;')) 

Deuxième problème:

Votre formulaire doit intégrer le formulaire i18n Pour ce faire, mettre cela dans la méthode de configuration:.Où $ cultures est un tableau de vos codes de cultures.

+0

C'est marrant, le toString que j'avais déjà. Mais maintenant, après l'ajout de l'embedI18n, tous les problèmes semblent être résolus, non seulement dans le sfForm, aussi dans la forme des lieux indépendants O_o. Donc, beaucoup pour cet indice :) – ownking

+0

Le problème malheureusement toujours existe, je ne sais pas pourquoi, mais quand je veux obtenir l'attribut de nom avec: $ cargo_size-> getName(); // (Les valeurs sont dans la base de données pour chaque langue) Renvoie une chaîne vide. Avez-vous plus d'idées sur ce que pourrait être le problème? – ownking