Merci beaucoup problème résolu, j'espère que la réponse pourra être utile a d'autres personnes.
Au passage les tutos sont super.
Bonjour,
je viens de finir le tuto faire un site avec cakephp jour2.
J'ai pu constater en lisant les commentaires sous la vidéo que je ne suis pas le seul a avoir ce problème.
Lorsque je veux uploader une image via une url, j'ai le message suivant qui apparaît:
current() expects parameter 1 to be array, boolean given [APP/Controller/MediasController.php, line 74]
Je n'arrive pas à trouver ce qui cloche je fais donc appel à votre aide.
Voila mon fichier MediasController.php
<?php
class MediasController extends AppController
{
public $components = array('Img') ;
public function beforeFilter()
{
parent::beforeFilter();
$this->layout = 'modal';
}
function admin_index($post_id)
{
if($this->request->is('post'))
{
$data = $this->request->data'Media'];
if(isset($data'url']))
{
$this->redirect(array('action'=>'show','?class=&alt=&src='.urlencode($data'url'])));
}
$dir = IMAGES.date('Y');
If(!file_exists($dir))
mkdir($dir,0777);
$dir .= DS.date('m');
If(!file_exists($dir))
mkdir($dir,0777);
$f = explode('.', $data'file']'name']);
$ext = '.'.end($f);
$filename = strtolower(Inflector::slug(implode('.',array_slice($f,0,-1)),'-'));
//Sauvegarde Bdd
$success= $this->Media->save(array(
'name'=>$data'name'],
'url'=> date('Y').'/'.date('m').'/'.$filename.$ext,
'post_id'=> $post_id
));
if($success)
{
move_uploaded_file($data'file']'tmp_name'], $dir.DS.$filename.$ext);
foreach(Configure::read('Media.formats') as $k=>$v)
{
$prefix = $k;
$size = explode('x',$v);
$this->Img->crop($dir.DS.$filename.$ext,$dir.DS.$filename.'_'.$prefix.'.jpg',$size[0],$size[1]);
}
}
else
{
$this->Session->setFlash("L'image n'est pas au bon format","notif",array('type'=>'error'));
}
}
$d = array();
$d'medias'] = $this->Media->find('all',array('conditions' =>array('post_id' => $post_id)
));
$d'formats']= Configure::read('Media.formats');
$this->set($d);
}
function admin_show($id=null,$format='')
{
$d = array();
if($this->request->is('post'))
{
$this->set($this->request->data'Media']);
$this->layout = false;
$this->render('tinymce');
return;
}
if($id)
{
$this->Media->id = $id;
$media = current($this->Media->read());
$d'src'] = Router::url('/img/'.$media'url'.$format]);
$d'alt'] = $media'name'];
$d'class'] = 'alignLeft';
}
else
{
$d = $this->request->query;
$d'src'] = urldecode($d'src']);
}
$this->set($d);
}
function admin_delete($id)
{
$this->Media->id = $id;
$file = $this->Media->field('url');
unlink(IMAGES.DS.$file);
$f = explode('.', $file);
$ext = '.'.end($f);
$file = implode('.',array_slice($f,0,-1));
debug($filename);
foreach(glob(IMAGES.DS.$file.'_*.jpg') as $v)
{
unlink($v);
}
$this->Media->delete($id);
$this->Session->setFlash("L'image a bien été supprimée","notif");
$this->redirect($this->referer());
}
}
?>
Quand je compare l'url transmise dans la barre de navigation voila à quoi elle ressemble:
http://localhost/tuto/admin/medias/show/%3Fclass%3D%26alt%3D%26src%3Dhttp%253A%252F%252Fwww.grafikart.fr%252Fimg%252Ftutos%252Fthumbs%252F259\_205x100.jpg
alors que dans la vidéo elle ressemble à un truc du genre:
http://localhost/tuto/admin/medias/show/?class=alt=src=http://Fwww.grafikart.fr/img/tutos/thumbs/259\_205x100.jpg
Ce que je peux remarquer en plus c'est que la requette passée est :SELECT Media.id, Media.name, Media.url, Media.post\_id, Media.type FROM medias AS Media WHERE Media.id = '?class=&alt=&src=http%3A%2F%2Fwww.grafikart.fr%2Fimg%2Ftutos%2Fthumbs%2F259_205x100.jpg' LIMIT 1
Il cherche un id qui n'existe pas.
Merci d'avance pour votre aide.
Cordialement.
Merci beaucoup problème résolu, j'espère que la réponse pourra être utile a d'autres personnes.
Au passage les tutos sont super.
Remplace
if($id)
par
if(is_numeric($id))
Dans ta fonction show
merci ;)
Avec Cake php 2.2.1, au lieu d'écrire :
$this->redirect(array('action'=>'show','?class=&alt=&src='.urlencode($data'url'])));
on peut mettre :
$this->redirect(array('action' => 'show', '?' => array('class' => '', 'alt' => '', 'src' => urlencode($data'url']))));
Ça me semble plus propre et on a pas besoin de mettre le if(is_numeric($id))
J'ai trouvé cette réponse dans les commentaires de la vidéo.
Super merci pour le tuyau gato :)
J'ai palié à cette erreur en utilisant un findBy
function admin_show($id = null, $format = ''){
$d = array();
if($this->request->is('post')){
$this->set($this->request->data'Media']);
$this->layout = false;
$this->render('tinymce');
return;
}
if($id && is_numeric($id)){
$this->Media->$id = $id;
$media=$this->Media->findAllById($id);
$d'src'] = Router::url('/img/'.$media[0]'Media']'url'.$format]);
$d'alt'] = $media[0]'Media']'name'];
$d'class'] = 'alignLeft';
}else{
$d = $this->request->query;
$d'src'] = urldecode($d'src']);
}
$this->set($d);
}