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.

6 réponses


Grafikart
Réponse acceptée

Remplace
if($id)
par
if(is_numeric($id))

Dans ta fonction show

guiom
Auteur

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.

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

    }