Bonsoir,
Je souhaite avoir une image différente pour mes articles traduits mais je ne parviens pas à sauvegarder mes images.
mon PostsController:
public function admin_add() {
if ($this->request->is('post')) {
$this->Post->create();
if(!empty($this->request->data['Post']['image_file']['tmp_name']))
{
$dir = WWW_ROOT.'uploads'.DS.'articles';
$r = move_uploaded_file($this->request->data['Post']['image_file']['tmp_name'], $dir.DS.$this->request->data['Post']['image_file']['name']);
$this->request->data['Post']['image'] = $this->request->data['Post']['image_file']['name'];
unset($this->request->data['Post']['image_file']);
}
if ($this->Post->saveAssociated($this->request->data)) {
$this->Session->setFlash('The post has been saved.','flash_success');
return $this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The post could not be saved. Please, try again.','flash_failure'));
}
}
$categories = $this->Post->Category->find('list');
$users = $this->Post->User->find('list');
$this->set(compact('categories', 'users'));
}
mon model:
public $actsAs = array(
'Translate' => array(
'name' => 'nameTranslation',
'image' => 'imageTranslation',
'content' => 'contentTranslation'
)
);
ma vue:
<?php echo $this->Form->create('Post'); ?>
<?php foreach (Configure::read('Config.languages') as $lang): ?>
<?php echo $this->Form->input('Post.name.'.$lang); ?>
<?php endforeach; ?>
<?php foreach (Configure::read('Config.languages') as $lang): ?>
<?php echo $this->Form->input('Post.content.'.$lang); ?>
<?php endforeach; ?>
<?php foreach (Configure::read('Config.languages') as $lang): ?>
<?php echo $this->Form->input('Post.image_file.'.$lang, array('type'=>'file')); ?>
<?php endforeach; ?>
une idée sur l'erreur que j'ai faite?
Bonjour, une erreur se produit ou l'image n'est simplement pas enregistrée?
Que vaut $r ?
Remarque :
Comment géres-tu la cohérence transactionnelle entre la mise à jour de la base et l'enregistrement de l'image?
Dans ton cas la base peut enregistrer le nom d'une image qui n'est pas enregistrée sur le serveur... Ou une image peut s'enregistrer sur le serveur sans mettre la base à jour... (le serveur SQL qu'est parti en vac....)
InnoDB supporte les transactions.
Bonjour,
Je n'ai pas d'erreur c'est juste l'image qui n'est pas enregistré.
Je viens de regarder la valeur de $r et il n'est pas défénie. (sans le système de traduction mon image s'enregistre bien)
J'avais tenté de faire un save sans association mais il me renvoyait une erreur de la base de donnée :
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Array' in 'field list'
la table i18n et de type INNooDB
Je précise également que je suis débutant et que je n'ai pas encore assimilé toutes les bonne pratiques de cakephp
Au niveau de ton form->create, rajoute ceci :
<?= $this->Form->create('Post', array('type' => 'file')); ?>
Pour l'instant, le formulaire ne peut pas gérer les images car il ne possède pas l'entête enctype="multipart/form-data.
Ensuite, je te conseillerais de gérer l'upload d'image au niveau de ton modèle, pas de ton controller...
Merci je vais essayé de gérer l'upload dans mon model.
Pour le multipart/form-data c'est juste un oubli que j'ai fait ici en recopiant le code.
J'ai encore une petite question concernant la traduction.
Lorsque je souhaites traduire par exemple un utilisateur qui aurai comme table (name, last_name, function, email). Comment dois-je m'y prendre pour traduire que la fonction?