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.
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.
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);
}