Bonjour à tous,
J'ai un problème lors de l’insertion de données en plusieurs langues sur mon site.
Je précise que ma table i18n a été créée à partir de la console et que sur une insertion avec une seule langue ça fonctionne !
Voilà l'erreur :
Database Error
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Array' in 'field list'
SQL Query: INSERT INTO expandingCakePHP.accesses (name) VALUES (Array)
Notice: If you want to customize this error message, create app/View/Errors/pdo_error.ctp

<u>Dans mon adminadd.ctp (dossier View/Accesses)</u>
foreach (Configure::read('Config.languages') as $lang) {
echo $this->Form->input('Access.name.'.$lang, array('label'=>_\
('Name').' ('.$lang.')'));
}

<u>Dans mon access.php (dossier Model)</u>
var $actsAs = array(
'Translate' => array(
'name' => '_name'
)
);

<u>Dans mon AccessesController.php (dossier Controller)</u>
public function admin_add() {
if ($this->request->is('post')) {
$this->Access->create();
$this->Access->locale = Configure::read('Config.languages');
if ($this->Access->save($this->request->data)) {
$this->Session->setFlash(__('The access has been saved'), 'notif');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The access could not be saved. Please, try again.'), 'notif', array('type'=>'alert-error'));
}
}
}

<u>Dans mon bootstrap.php (dossier Config)</u>
Configure::write('Config.languages', array('fre','eng'));
Configure::write('Config.language', 'fre');
Configure::write('App.encoding', 'utf-8');

D'après le tuto il me semble que la structure reçue par le formulaire post est correcte ?
/app/Controller/AccessesController.php (line 46)
array(
'Access' => array(
'name' => array(
'fre' => 'titre',
'eng' => 'title'
)
)
)
Une idée ? Merci d'avance

7 réponses


Salut,

Je rencontre exactement le même problème.
Si tu as la soluce, peux tu nous la communiquer ?

Si non, est ce que quelqu'un rencontra le même problème et su le résoudre.

Merci

Bizarre ca a l'air tout à fait correct, je ne sais pas si c'est le cas ou pas mais je crois avoir eu des soucis avec des noms de models (pardon pour le terme) "mal-foutus" dans le sens ou les inflections de cake son mal gérées donc a tout hasard je demande si tu pourrais pas rajouter cette ligne dans ton bootstrap.php

Inflector::rules('plural', array('irregular' => array('access' => 'accesses')));

:)

Remodes
Auteur

Merci pour ta réponse.
J'ai essayé sans succès. J'avais pensé à cette erreur mais je viens de tester avec une table books donc à priori pas trop de problème au niveau pluriel pour Cake et le problème persiste.
L'erreur semble plutôt venir de fait que la database reçoit un tableau contenant deux entrées : le 'fre' et le 'eng' (pour moi) alors qu'autrement il recevrait une data directement. Cela ne devrait-il pas être pris en compte avec le :
$this->Access->locale = Configure::read('Config.languages');
La doc de cake ne parle pas de ce point.
Une autre idée ? De mon côté je continue à tester et posterait la réponse si je la trouve
Bonne soirée

Salut, tu pourrais essayer en changeant les deux lignes en gras?

Dans mon AccessesController.php (dossier Controller)

public function admin_add() {
if ($this->request->is('post')) {
$this->Access->create();
$locales = array_values(Configure::read('Config.languages'));
$this->Access->locale = $locales;
if ($this->Access->save($this->request->data)) {
$this->Session->setFlash(__('The access has been saved'), 'notif');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The access could not be saved. Please, try again.'), 'notif', array('type'=>'alert-error'));
}
}
}
$locales = array_values(Configure::read('Config.languages'));
$this->Article->locale = $locales;

J'attends le résultat :)

Remodes
Auteur

Salut,
Non cela ne fonctionne pas.
J'essaie de voir ce qui cloche par rapport au tuto car son exemple à lui fonctionne. La version de Cake est différente, je ne sais pas encore si cela joue

Bonjour,
alors la solution est d'utiliser pour la version de cakePhp 2, non pas

$this->Model->save()

mais

$this->Model->saveAssociated()

Voilà :)

Merci cajoline pour ta solution, ça fonctionne bien dans mon application
//fichier PostsController.php

$this->Post->saveAssociated($this->request->data);