Symfony 1.4: Doctrine i18n problèmes de générateur
-
30-09-2019 - |
Question
J'ai un problème bizarre avec mon schéma de doctrine i18n et i.a. le générateur d'administration.
(S'il vous plaît regarder la partie d'édition ci-dessous en premier)
Les regards de schéma comme:
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 une radio Butten avec les ID corrects, mais les valeurs de nom vides. Même lorsque je tente d'obtenir la valeur de nom en sélectionnant directement un objet CargoSize par ID et LANG, getName () retourne toujours une chaîne vide (DB est correctement rempli de données approprié).
est somethng worng 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
Les regards generator.yml comme:
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: ~
Le plus drôle est que la vue liste me montre le nom i18n. Mais en vue de modifier je reçois toujours l'erreur "widget 'name' n'existe pas" .
Avez-vous les gars ont une idée pourquoi cela se produit? 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
quelqu'un n'a une idée? Je suis vraiment deperated: (
La solution 2
J'ai trouvé le bogue. Pour une raison quelconque la culture a été réglée sur " de_DE " au lieu de "de". Avec ce réglage, les choses de comportement i18n n'a pas marché!
Autres conseils
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:
$this->embedI18n($cultures);
où $ cultures est un tableau de vos codes de cultures.