Bonjour,

Je suis les tutos creer un site de a à z et je suis au jour 5, j'ai un probleme avec le tableau d'options pour creer le formulaire, il est vide alors que j'envois bien des options.

Voici mes codes;
Form.php:

<?php

class Form{

    public $controller;

    public function __construct($controller){
        $this->controller = $controller;
        //debug($this->controller); die();
    }

    public function input($name,$label,$options = array()){
        debug($options); die(); // vide je comprends pas :(

        if(!isset($this->controller->request->data->$name)){
            $value = '';
        }else{
            $value = $this->controller->request->data->$name;
        }
        if($label == 'hidden'){
            return '<input type="hidden" name="'.$name.'" value="'.$value.'">';
        }
        $html ='<div class="clearfix form-group row">
                    <label for="input'.$name.'" class="col-sm-2 col-form-label">'.$label.'</label>
                    <div class="input col-sm-4">';
        $attr = ' ';

        foreach($options as $k=>$v){
            if($k != 'type'){
            $attr .= " $k=\"$v\"";
            }
        }
        if(!isset($options['type'])){
            $html .= '<input id="input'.$name.'" type="text" name="'.$name.'" value="'.$value.'" class="form-control" '.$attr.'>';
        }elseif($options['type'] == 'textarea'){
            $html .= '<textarea rows="7" id="input'.$name.'" name="'.$name.'" class="form-control" '.$attr.'>'.$value.'</textarea>';
        }elseif($options['type'] == 'checkbox'){
            $html .= '<div class="form-check">
                        <input type="hidden" name="'.$name.'" value="0">
                        <input class="form-check-input" type="checkbox" id="input'.$name.'" name="'.$name.'" value="1">
                        <label class="form-check-label" for="input'.$name.'">
                        Mettre en ligne
                        </label>
                    </div>';
        }
        $html .= '</div></div>';
        return $html;
    }
}

PostsController:

<?php

class PostsController extends Controller{

    function index(){
        $perPage = 1;
        $this->loadModel('Post');
        $condition = array(
            'type'=>'post',
            'online' => '1'
        );
        $d['posts'] = $this->Post->find(array(
            'conditions' => $condition,
            'limit' => ($perPage * ($this->request->page - 1)).','.$perPage
        ));
        $d['total'] = $this->Post->findCount($condition);
        $d['page'] = ceil($d['total'] / $perPage);

        $this->set($d);
    }

    function view($id,$slug){
        $this->loadModel('Post');
        $d['post'] = $this->Post->findFirst(array(
            'fields'        => 'id,slug,content,name',
            'conditions'    => array(
                'id'=>$id,
                'type'=>'post',
                'online' => '1')
        ));
        if(empty($d['post'])){
            $this->e404('Page introuvable');
        }
        if($slug != $d['post']->slug){
            $this->redirect("posts/view/id:$id/slug:".$d['post']->slug,301);
        }

        $this->set($d);
    }

    /**
     * ADMIN
     */
    function admin_index(){
        $perPage = 10;
        $this->loadModel('Post');
        $condition = array('type'=>'post');
        $d['posts'] = $this->Post->find(array(
            'fields' => 'id,name,online', 
            'conditions' => $condition, 
            'limit' => ($perPage * ($this->request->page - 1)).','.$perPage
        ));
        $d['total'] = $this->Post->findCount($condition);
        $d['page'] = ceil($d['total'] / $perPage);
        $this->set($d);

    }

    /**
     * Permet d'éditer un article
     */
    function admin_edit($id = null){
        $this->loadModel('Post');
        //debug($this->request->data); die();
        if($this->request->data){
            $this->Post->save($this->request->data);
            $id = $this->request->data->id;
        }
        if($id){
            $this->request->data = $this->Post->findFirst(array(
                'conditions' => array('id'=>$id)
            ));
        }

    }

    /**
     * Permet de supprimer un article
     */
    function admin_delete($id){
        $this->loadModel('Post');
        $this->Post->delete($id);
        $this->Session->setFlash('Le contenu a bien été supprimer.');
        $this->redirect('admin/posts/index');
    }

}

admin_edit.php

<div class="page-header">
    <h1>Editer un article</h1>
</div>

<form action="<?php echo Router::url('admin/posts/edit'); ?>" method="POST">
    <?php echo $this->Form->input('name','Titre'); ?>
    <?php echo $this->Form->input('slug','Url'); ?>
    <?php echo $this->Form->input('id','hidden'); ?>
    <?php echo $this->Form->input('content','Contenu',array('type'=>'textarea')); ?>
    <?php echo $this->Form->input('online','En ligne',array('type'=>'checkbox','rows'=>5)); ?>
    <div class="actions">
        <input type="submit" class="btn btn-primary" value="Envoyer">
    </div>
</form>

Si quelqu'un sait me mettre sur la voie ... ce serait cool.
Merci.

2 réponses


Carouge10
Réponse acceptée

Bonjour,
Lors de son 1er appel, c'est normale car ton input n'a pas d'options donc le die enpèche l'affichage des suivants.
si tu enlèves le die(), tu devrais les avoirs pour les 2 derniers

Effectivement merci, je vais eviter de mettre des die() tout le temps lol encore merci