Bonsoir à tous.
Je suis face à un soucis. dans la partie insertion d'image depuis le web
problm ds encodage de url

http://localhost/TuToCake/admin/medias/show/%3Fclass%3D%26alt%3D%26src%3Dhttp%253A%252F%252Fwww.grafikart.fr%252Fimg%252Flogo.png

<?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;
            if(isset($data'Media']'url'])){
                $this->redirect(array('action' => 'show' , "?class=&alt=&src=".urlencode($data'Media']'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'Media']'file']'name']);
            $ext = '.'.end($f);
            $filename = Inflector::slug(implode('.' ,array_slice($f,0,-1)),'-');
            if(!empty($data'Media']'name'])){
                $name = $data'Media']'name'];
            }else{
                $name = $filename;
            }
            $n = $dir.DS.$filename.$ext;
            if(file_exists($n)){
                $i = 1;
                while(true){
                    $n = $dir.DS.$filename.$i.$ext;
                    if(!file_exists($n)){
                        $filename = $filename.$i;
                        break;
                    }
                    $i++;
                }
            }
            // Sauvegarde en bDD
            $success = $this->Media->save(array(
                    'name' => $name,
                    'url' => date('Y').'/'.date('m').'/'.$filename.$ext,
                    'post_id' => $post_id
                ));
            if($success){
                move_uploaded_file($data'Media']'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'medias'] = $this->Media->find('all' , array (
            'conditions' => array('post_id' => $post_id, 'type' => 'image')
            ));
        $d'format'] = 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->delete($id);
        $this->Session->setFlash("L'image à bien été supprimée",'notif',array('type' => 'success'));
        $this->redirect($this->referer());
    }
}

et mon view

<h3>Depuis le web</h3>
<?php echo $this->Form->create('Media'); ?>
    <?php echo $this->Form->input('url', array('label' => 'URL de l\'image')); ?>
<?php echo $this->Form->end('Insérer'); ?>

je tiens à remercier Grafikart pour c'est super tuto

3 réponses


zenkiai
Réponse acceptée

Salut,
Le sujet a déjà été traité dans les commentaires du tuto car je m'en suis servi aussi,voici la solution :
rajoute dans ta fonction show du controller

if($id && is_numeric($id))

Cela devrait fonctionné ensuite.
A+

merci beaucoup zenkiai

De rien c'est avec plaisir, pour une fois que je peux ajouter ma pierre à l'édifice en aidant à mon tour quelqu'un.