CakePHP-Fr.Org

Forum francophone du Framework CakePHP

Vous n'êtes pas identifié.

#1 29-01-2013 22:28:20

yanouil
Fraisier
Date d'inscription: 19-11-2012
Messages: 64

plugin Upload - attachments table

Bonjour,

J'utilise depuis peu ce plugin https://github.com/josegonzalez/upload et il marche bien. Mais je souhaite utiliser la table attachment pour pourvoir plusieurs pour le même 'Post'. J'ai suivi le tuto mais j'ai des zones d'ombres.

En fait, j'ai creer la table attachment :

Code: php

  1.   CREATE table attachments (
  2.     `id` int(10) unsigned NOT NULL auto_increment,
  3.     `model` varchar(20) NOT NULL,
  4.     `foreign_key` int(11) NOT NULL,
  5.     `name` varchar(32) NOT NULL,
  6.     `attachment` varchar(255) NOT NULL,
  7.     `dir` varchar(255) DEFAULT NULL,
  8.     `type` varchar(255) DEFAULT NULL,
  9.     `size` int(11) DEFAULT 0,
  10.     `active` tinyint(1) DEFAULT 1,
  11.     PRIMARY KEY (`id`)
  12.   );

J'ai crer la méthode Attachment.php :

Code: php

  1. <?php
  2.   class Attachment extends AppModel {
  3.     public $actsAs = array(
  4.       'Upload.Upload' => array(
  5.         'attachment' => array(
  6.           'thumbnailSizes' => array(
  7.             'xvga' => '1024x768',
  8.             'vga' => '640x480',
  9.             'thumb' => '80x80',
  10.           ),
  11.         ),
  12.       ),
  13.     );
  14.  
  15.     public $belongsTo = array(
  16.       'Post' => array(
  17.         'className' => 'Post',
  18.         'foreignKey' => 'foreign_key',
  19.       ),
  20.       'Message' => array(
  21.         'className' => 'Post',
  22.         'foreignKey' => 'foreign_key',
  23.       ),
  24.     );
  25.   }

Puis la contre relation dans le modele Post.php

Code: php

  1.   <?php
  2.   class Post extends AppModel {
  3.     public $hasMany = array(
  4.       'Image' => array(
  5.         'className' => 'Attachment',
  6.         'foreignKey' => 'foreign_key',
  7.         'conditions' => array(
  8.           'Attachment.model' => 'Post',
  9.         ),
  10.       ),
  11.     );
  12.   }

A partir de là j'ai une erreur :

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Attachment.model' in 'where clause'

SQL Query: SELECT `Image`.`id`, `Image`.`model`, `Image`.`foreign_key`, `Image`.`name`, `Image`.`attachment`, `Image`.`dir`, `Image`.`type`, `Image`.`size`, `Image`.`active` FROM `betechnologie`.`attachments` AS `Image` WHERE `Attachment`.`model` = 'Post' AND `Image`.`foreign_key` IN (39, 23, 22)

Pour moi l'erreur venait du model Post.php, j'ai donc corrigé par :

Code: php

  1.   <?php
  2.   class Post extends AppModel {
  3.     public $hasMany = array(
  4.       //'Image' => array(
  5.                         'Attachment' => array(
  6.         'className' => 'Attachment',
  7.         'foreignKey' => 'foreign_key',
  8.         'conditions' => array(
  9.         'Attachment.model' => 'Post',
  10.         ),
  11.       ),
  12.     );
  13.   }

Et là je n'ai plus d'erreur. Mais les image ne sont pas sauvegardées. Et là je pense que ca vien du formulaire dans ma vue. je ne sais pas comment nommé les champ pour l'enregistremet dans la table attachment. Voici mon formulaire :

Code: php

  1.    <?php
  2.         echo $this->Form->create('Post', array('type' => 'file'));
  3.  
  4.             echo $this->Form->input('Post.title', array('rows'=>1));
  5.             echo $this->Form->input('Post.body');
  6.             echo $this->Form->input('Attachment.attachment', array('type' => 'file'));
  7.             echo $this->Form->input('Attachment.dir', array('type' => 'hidden'));
  8.  
  9.         echo $this->Form->end('add'); ?>

et dans mon contrôler, j'ai :

Code: php

  1. /**
  2.  * add method
  3.  *
  4.  * @return void
  5.  */
  6.   public function add() {
  7.     if ($this->request->is('post')) {
  8.       $this->Post->create();
  9.       if ($this->Post->save($this->request->data)) {
  10.         $this->Session->setFlash('L\'article a été sauvegardé.', 'alert', array('type_alerte' => 'greenalert'));
  11.         $this->redirect(array('action' => 'index'));
  12.       } else {
  13.         $this->Session->setFlash('The post could not be saved. Please, try again.', 'alert', array('type_alerte' => 'rejectionalert'));
  14.       }
  15.     }
  16.   }

Bref, là les fichiers ne sont pas uploader, et il n'y a rien de sauvegarder dans la table attachment.

Avez vous des pistes ou des conseils? Merci d'avance.

Hors ligne

 

#2 30-01-2013 08:58:56

yanouil
Fraisier
Date d'inscription: 19-11-2012
Messages: 64

Re: plugin Upload - attachments table

Voilà ce que donne un $this->request->data dans le contrôler :

Code: php

  1. (
  2.     [Post] => Array
  3.         (
  4.             [user_id] => 1
  5.             [category_id] => 7
  6.             [type] => 1
  7.             [title] => title
  8.             [body] => body
  9.         )
  10.  
  11.     [Attachment] => Array
  12.         (
  13.             [dir] =>
  14.             [attachment] => Array
  15.                 (
  16.                     [name] => image_test.jpg
  17.                     [type] => image/jpeg
  18.                     [tmp_name] => /Applications/MAMP/tmp/php/phph5AZLB
  19.                     [error] => 0
  20.                     [size] => 176106
  21.                 )
  22.  
  23.         )
  24.  
  25. )

'dir' reste vide! Est ce normal?

Hors ligne

 

#3 30-01-2013 09:15:52

spout
Cooker
Date d'inscription: 18-12-2010
Messages: 1899

Re: plugin Upload - attachments table

Tu lui as pas setté de value, donc oui c'est normal.

Hors ligne

 

#4 30-01-2013 15:36:19

yanouil
Fraisier
Date d'inscription: 19-11-2012
Messages: 64

Re: plugin Upload - attachments table

Oui, je sais, mais dans le cas classique ou l'on utilise le plugin sans utiliser la table attachment, on ne set rien non plus et pourtant le plugin fait que le bon emplacement est mémorisé en base de donné.

En gros j'essaye de comprendre comment fonctionne se plugin pour savoir d'ou vient le problème. Car là je patauge...

Je trouve bien plus intéressant d'utiliser une table attachment pour tous mes upload de fichier, mais je n'arrive pas à mettre ca en place. Et je pense que la Doc n'est pas correct... cependant je trouve pas la soluce...

Je suis donc preneur de conseil ou pistes de départ...

Quelqu'un utilise ce plugin avec la table attachment? Utilisez vous d'autre plugin d'uplaod?

Hors ligne

 

Pied de page des forums

Propuls� par FluxBB
Traduction par FluxBB.fr