Bonjour,
J'ai un formulaire qui va ajouter une petite annonce, et je souhaite associé une photo.
En suivant le tuto de GA, j'ai donc fait repris le gestionnaire de Media.
<?php echo $this->Form->create('Media', array('type'=>'file'));?>
<?php echo $this->Form->input('file', array('label'=>'Photo','type'=>'file')); ?>
<?php echo $this->Form->input('name',array('label'=>__("Nom de l'image"))); ?>
<?php echo $this->Form->end(__('Ajouter'));?>
Mais je souhaite l'inclure dans le formulaire d'annonce.
<?php echo $this->Form->create('Annonce');?>
<fieldset>
<legend><?php echo __('Votre annonce'); ?> en 5 minutes</legend>
<?php echo $this->Form->input('content',array('label'=>"Description",'required','type'=>'textarea', 'rows' => '5','class'=>'input-xxlarge')); ?>
<?php echo $this->Form->input('address',array('label'=>__('Adresse'),'type'=>'textarea','rows'=>'2','class'=>'input-xlarge','style'=>'float')); ?>
<?php echo $this->Form->input('phone',array('label'=>__('Telephone'))); ?>
<?php echo $this->Form->input('category_id', array(
'legend'=>__('Categorie'),
'type'=>'radio'
)
); ?>
La je ne vois pas comment au moment de la sauvegarde faire en sorte que l'image ira se sauvegarder dans le model "Media", et que l'annonce dans le model "Annonce".
Je vais essayer de voir si c'est possible de faire ceci ( je rêve debout)
<?php echo $this->Form->create('Annonce','Media', array('type'=>'file'));?>
Dans le controller tu devra faire 2 traitements, un premier pour sauvegarder l'annonce et un second pour sauvegarder le Media séparément (ou utiliser le afterSave du model)
<?php echo $this->Form->create('Annonces');?>
<fieldset>
<legend><?php echo __('Votre annonce'); ?> en 5 minutes</legend>
<?php echo $this->Form->input('content',array('label'=>"Description",'required','type'=>'textarea', 'rows' => '5','class'=>'input-xxlarge')); ?>
<?php echo $this->Form->input('prix',array('label'=>__('Prix'),'class'=>'input-mini')); ?>
<?php echo $this->Form->input('Media.file', array('label'=>__('Photo'),'type'=>'file')); ?>
J'ai juste ajouter Media.file pour préciser que je veux sauvegarder dans la table Media.
Mais la je ne sais pas si c'est dans le controller que je dois specifier, que je veux utiliser le model media
ou c'est dans le model Annonces que je dois ajouter l'utilisation du model Media.
Si je comprends bien, le mieux est de faire le traitement dans le model, car il sera plus facile a tester avec les Tests Unitaire ( sur le Model justement)
J'ai un probleme j'ai crée un controller Annonce, qui aura plusieurs Media.
Seulement la BDD est de la forme Medias(id, url, post_id)
Est ce que c'est propre d'ajouter un champs annonce_id ?
Je vais devoir ajouter un champs (id, url, post_id, annonce_id)
Sniff, le saveAll ne renvoi pas d'erreur mais je n'ai aucune insertion en base sur le Model medias
En fait il ne fait qu'une seule requete, pas la deuxieme.
public function add() {
if ($this->request->is('post')) {
$data = $this->request->data;
// traitement photo
$dir = IMAGES.date('Y');
if(!file_exists($dir))
mkdir($dir,0777);
// creation rep correspondant au mois
$dir .= DS.date('m');
if(!file_exists($dir))
mkdir($dir,0777);
$f = explode('.', $data'Media']'file']);
$ext = '.'.end($f);
$filename = Inflector::slug(implode('.',array_slice($f,0, -1)),'-');
$data'Media']'url'] = date('Y').'/'.date('m').'/'.$filename.$ext;
if($this->Location->saveAll($data, array('validate'=>'first'))){
die("save");
} else {
die("ko");
}