8768 sujets

Développement web côté serveur, CMS

Bonjour,

Je débute en POO, et je viens d'amorcer un projet avec le framework CodeIgniter (je sais qu'il n'est plus maintenu, mais il est + abordable que Laravel, c'est la raison pour laquelle j'ai décidé de me faire la main sur celui-ci)

Malgré une doc pas mal foutue, je ne m'en sors carrément pas quand il s'agit d'afficher les données issues de ma DB.

La base de données est donc créée (pas par le biais du framework, j'ai créé mon SQL indépendamment).
Les paramètres de ma DB sont bien renseignés dans le fichier database.php

Ne reste donc qu'à coder au niveau MVC...
Mais tout ce que j'essaie est vain. J'enchaine les erreurs...

J'ai donc une table employes avec une entrée dedans.

Pour afficher les données, voici ce que j'ai piteusement tenté de faire :

Au niveau du modèle (employe.php) :
 
<?php

class Employe extends CI_Model {

    function __construct()
    {
        // il parait que cette mention est obligatoire
        parent::__construct();
    }
    
    function viewEmploye() {
        $this->load->database();
        $query = $this->db->query('SELECT t_nom_employe, t_prenom_employe, t_commentaire_employe FROM employes');
        if($query->num_rows() > 0){
            foreach ($query->result_array() as $data) {
                echo $data['t_nom_employe'];
                echo $data['t_prenom_employe'];
                echo $data['t_commentaire_employe'];
            } 
        } else { echo "Pas d'article."; }
            $query->free_result();
    }
}



Au niveau du contrôleur :


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

class Vue extends CI_Controller {

	public function vueEmploye() 	{
	$this->load->model('Employe');
	$data = array();
	$data['employesall'] = $this->employe->viewEmploye();
	$this->load->view('vue/test', $data);
	}
}


Au niveau de la vue :

<?php echo $employesall; ?>


Et donc l'erreur actuelle est :

( ! ) Fatal error: Call to a member function viewEmploye() on a non-object in C:\wamp\www\codeIgniter\application\controllers\vue.php on line 75
L'erreur est sans doute très parlante, mais... Je ne sais quand même pas comment y remédier !

Si ça vous parait complètement abracadabrant, c'est bien parce que je ne sais vraiment pas comment je dois faire, faute d'avoir trouvé sur le net un exemple qui stipule clairement quoi mettre dans quel fichier...

Merci d'avance pour votre aide !
Ton problème vient du fait que les noms de modèles sons sensibles à la casse :


$data['employesall'] = $this->[b]E[/b]mploye->viewEmploye();


Le message d'erreur que tu as signifie que tu tentes d'appeler la méthode viewEmploye() sur une variable qui n'est pas un objet. Normalement codeIgniter aurait du t'afficher une page d'erreur qui dit que la propriété $employe est indéfinie.
Modifié par JeryJames (04 Aug 2014 - 17:46)
Reka a écrit :

Si ça vous parait complètement abracadabrant, c'est bien parce que je ne sais vraiment pas comment je dois faire, faute d'avoir trouvé sur le net un exemple qui stipule clairement quoi mettre dans quel fichier...


Pourtant avec CodeIgniter c'est pas très compliqué. Ton contrôleur se charge d'appeler les données depuis le modèle et de les passer à la vue. La vue est le seul endroit où tu peux afficher des données, donc pas de echo dans le modèle comme tu as fais.

Ton code devrait ressembler à ça :

controllers/employe.php


<?php

class Employe extends CI_Controller {

  public function all()
  {
    $this->load->model('Employe_model');

    $employes = $this->Employe_model->getEmployes();

    $this->load->view('employe/all', compact('employes'));
  }
}


models/employe_model.php


<?php

class Employe_model extends CI_Model {

  public $nom;
  public $prenom;
  public $commentaire;

  public function __construct()
  {
    parent::__construct();
    $this->load->database();
  }

  public function getEmployes()
  {
    $query = $this->db->get('employes');
    return $query->result();
  }
}


view/employe/all.php


<h1>
  Tous les employés
</h1>

<ul>
<?php foreach ($employes as $employe): ?>
  <li>

    <h2>
      <?= html_escape($employe->prenom . ' ' . $employe->nom) ?>
    </h2>

    <p>
      <?= html_escape($employe->commentaire) ?>
    </p>

  </li>
<?php endforeach; ?>
</ul>


Laravel n'est pas plus compliqué que CodeIgniter et il permet de faire plus de choses en écrivant moins de code.

Ton code sous Laravel ressemblerait à ça :

app/routes.php


<?php

Route::get('employes-all.html', 'EmployesController@all');



controllers/EmployesController.php


<?php

class EmployesController extends BaseController {

  public function all()
  {
    $employes = Employe::all();
    return View::make('employe.all', compact('employes'));
  }
}


models/EmployesModel.php


<?php

class Employe extends Eloquent {
  
}


view/employe/all.blade.php


<h1>
  Tous les employés
</h1>

<ul>
@foreach ($employes as $employe)
  <li>

    <h2>
      {{{ $employe->prenom }}} {{{ $employe->nom }}}
    </h2>

    <p>
      {{{ $employe->commentaire }}}
    </p>

  </li>
@endforeach
</ul>

Modifié par JeryJames (05 Aug 2014 - 10:22)
Cette réponse m'aide énormément... Je vais pouvoir faire les liens avec Laravel en plus, ce qui est vraiment génial!

C'est peut-être pas très compliqué, ...je suis sûre que ça ne l'est pas...
Mais là je suis à l'ABC de la POO.
Ca ne ressemble pas au procédural, ça fait appel à des mécanismes étrangers, et ça me demande des efforts de fou en concentration...

Enfin voilà.
Un grand grand merci, JeryJames.