• hiérarchiser son code sous codeigniter

    image de l'aticle hiérarchiser son code sous codeigniter

    Codeigniter est un Framework créé en MVC (Model Vue Controller) pour développer des sites afin de ne pas toujours réécrire le même code. Codeigniter vous aides à créer plus facilement et de façon structuré vos sites Web.
    Ce tuto à pour but de vous montrer une façon simple de développer un controlleur afin de ne pas effectuer trop de changement si ce controlleur était amené à être modifié pour, par exemple, ajouter un input dans la vue.
    Prenons un exemple la création d'une page de contact :
    Notez que je développe mes sites avec le module carabiner pour codeigniter qui me permet de développer plus facilement, d'optimiser mes titre et description de pages facilement et bien d'autres choses encore.

    Voici la vue :

    <div id="content">
        <div class="wrap">
            <?php if (validation_errors()): ?>
            <?=validation_errors(); ?>
            <?php elseif (isset($success) && $success != ''):?>
            <?=$success?>
            <?php elseif (isset($error) && $error != ''):?>
            <?=$error?>
            <?php endif; ?>
                <div class="article">
                    <?=form_open(site_url('contact/send'), array('id' => 'contactform', 'class' => 'form_contact'))?>
                    <div style="float:left;">
                        <div class="field">
                            <label class="txt_big_lb">Votre nom :</label>
                            <?=form_input(array('id' => 'name', 'name' => 'name', 'value' => $name, 'class' => 'input_form'))?>
                        </div>
                        <div class="cleardivmax"></div>
                        <div class="field">
                            <label class="txt_big_lb">Votre e-mail :</label>
                            <?=form_input(array('id' => 'email', 'name' => 'email', 'value' => $email, 'class' => 'input_form'))?>
                        </div>
                        <div class="cleardivmax"></div>
                        <div class="field">
                            <label class="txt_big_lb">Votre t&eacute;l&eacute;phone :</label>
                            <?=form_input(array('id' => 'telephone', 'name' => 'telephone', 'value' => $telephone, 'class' => 'input_form'))?>
                        </div>
                    </div>
                    <div class="cleardivmax"></div>
                    <div class="field">
                        <label for="name">Votre message :</label>
                        <div class="cleardivmax"></div>
                        <?=form_textarea(array('name' => 'commentaires', 'cols' => '37', 'rows' => '8', 'class' => 'required'), $commentaires)?>
                    </div>
                    <div class="cleardivmax"></div>
                    <span>&nbsp;</span>
                    <?=form_reset(array('name' => 'submit', 'class' => 'btt_subm'), 'Vider', 'onClick="document.getElementById(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'ContactForm\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\').reset()"')?>
                    <?=form_submit(array('name' => 'submit', 'class' => 'btt_subm'), 'Envoyer')?>
                    <?=form_close()?>
                </div>
        </div>
    </div>

    Dans cette vue ont créé tout simplement la form avec form_open(), ont ajoute les input de type text avec form_input et une textarea avec form_textarea puis les boutons input type submit avec form_submit.

    Passons maintenant au controlleur :

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    class Contact extends CI_Controller {
    // Permet de recréer la vue avec les valeurs ajouter par l'utilisateur s'il y a des erreurs
          private $_data;
          // Tableau permettant de stocker les valeurs à valider par la suite grâce à la librairie form_validation
          private $_configValidateFields = array(
              array(
                'field'   => 'name',
                'label'   => 'Nom',
                'rules'   => 'trim|required'
              ),
              array(
                'field'   => 'email',
                'label'   => 'Email',
                'rules'   => 'trim|required|valid_email'
              ),
              array(
                'field'   => 'commentaires',
                'label'   => 'Message',
                'rules'   => 'trim|required'
              ),
              array(
                'field'   => 'telephone',
                'label'   => 'Telephone',
                'rules'   => 'trim'
              )
            );
        
        public function __construct()
        {
            parent::__construct();
            $this->_data['nav_selected'] = "contact";
        }
        public function index()
        {
            // render action view
            $this->view->render($this->_data);
        }
        function send() // action du controlleur appelée dans la vue précédente
        {
            $this->load->library('form_validation'); // Ont charge la librairie
            $this->form_validation->set_rules($this->_configValidateFields); // Ont valide les valeurs envoyées en post par l'utilisateur
            
            $ip = $this->input->ip_address();
            $name = $this->input->post('name', TRUE);
            $email = $this->input->post('email', TRUE);
            $telephone = $this->input->post('telephone', TRUE);
            $commentaires = $this->input->post('commentaires', TRUE);
            
            if ($this->form_validation->run() == FALSE) // Il y a eu des erreurs, ont redirige l'utilisateur
            {
                $this->view->set('action', 'index')->render($this->_data); // On renvoie vers la vue du dossier views/contact/index
                return;
            }
            else
            { // Tout est ok, ont envoie le mail à l'administrateur du site
                $this->load->library('email'); // Charegement de la librairie email de codeigniter
            
                $this->email->from($email, $name);
                
                // mail_contact et title_site est chargé au démarrage de l'application grâce aux information récupérées dans la BDD
                $this->email->to($this->config->item('mail_contact'));
                $this->email->subject($this->config->item('title_site'));
                $this->email->message("Nom : {$name}\n\nEmail : {$email}\n\nTelephone : {$telephone}\n\nMessage :\n\n{$commentaires}\n\nIP: {$ip}");
            
                if ($this->email->send()) // Ont envoie le mail
                {
    // Ont vide la valeur pour que la forme contact de la vue n'affiche plus les valeurs
                    $this->_data['name'] = '';
                    $this->_data['email'] = '';
                    $this->_data['telephone'] = '';
                    $this->_data['commentaires'] = '';
    // success est utilisé pour afficher un message à l'utilisateur comme quoi sa demande a bien été prise en compte
                    $this->_data['success'] = "Votre message &agrave; bien &eacute;t&eacute; envoy&eacute;, nous vous r&eacute;pondrons dans les meilleurs d&eacute;lais.";

                    $this->view->set('action', 'send')->render($this->_data);
                    return;
                }
                else
                {
    // ici il y a eu une erreur d'envoie de mail, cela peut se produire si la fonction mail n'est pas charger par php ou si vous avez
    // un mauvais paramétrage de votre serveur smtp dans codeigniter
    // dans ce cas ont récupère les valeurs saisies par l'utilisateur pour qu'il n'est pas à tout ressaisir et ont l'averti du message
    // par un message d'erreur
                    $this->_data['name'] = $name;
                    $this->_data['email'] = $email;
                    $this->_data['telephone'] = $telephone;
                    $this->_data['commentaires'] = $commentaires;
                    $this->_data['error'] = "Il y a eu des probl&egrave;mes lors de l'envoi de votre message, merci de nous contacter par t&eacute;l&eacute;phone ou de recommencer.";
                }
            }
    // on recharge le fichier de la vue qu'ont soumet de nouveaux à l'utilisateur, c'est une fonction de la librairie view utilisée
    // grâce à carabiner
            $this->view->set('action', 'index')->render($this->_data);
        }
    }

    Voilà, vous avez créé votre vue ainsi que votre controlleur. N'hésitez pas, quand vous créez un controlleur, de mettre des tableaux en variables privées pour pouvoir plus facilement gérer les validations de forms.

Laissez un commentaire

* Votre e-mail ne sera jamais utilisé ou donné à un tiers

Recherche

Catégories

Newsletters

Archives