Mysql
 sql >> Base de données >  >> RDS >> Mysql

Appel de la fonction de modèle dans la vue codeigniter

MVC ou pas vers MVC

La première chose que je dois noter est que Il est impossible d'écrire du MVC classique en PHP . En fait, les frameworks PHP de type MVC tels que CodeIgniter ou Yii implémentent une sorte de MVP dans lequel :

  • la vue est passive et ignore le modèle
  • le présentateur (contrôleur) change l'état du modèle, lit les informations et les transmet à la vue

Crédits à tereško

Approche CodeIgniter

Cependant, en particulier dans CodeIgniter, vous avez 3 étapes :

  • Créer un modèle pour interroger la base de données et renvoyer les données (sous forme de tableau ou d'objet)
  • Créer un contrôleur pour charger et récupérer le résultat du modèle (une méthode du modèle), et passez les données renvoyées à la vue
  • Créer une vue et utilisez des boucles PHP pour faire écho au résultat, créez le HTML.

Se réunir tous

Compte tenu de l'approche ci-dessus, vous devez récupérer le résultat de la base de données dans votre modèle :

application/models/product.php

class Product extends CI_Model
{
    public function get_product($product_id)
    {
        $this->db->select('*')->from('products');
        $this->db->where('product_id', $product_id);
        $this->db->join('versions', 'versions.product_id = products.product_id');
        $query=$this->db->get();
        return $query->first_row('array');
    }
}

Ensuite, récupérez et transmettez le résultat dans le contrôleur :

application/controllers/products.php

class Products extends CI_Controller
{
    public function view($product_id)
    {
        $this->load->model('product');
        // Fetch the result from the database
        $data['product'] = $this->product->get_product($product_id);
        // Pass the result to the view
        $this->load->view('product_view', $data);
    }
}

Enfin, utilisez les données renvoyées dans la vue, pour générer la liste :

application/views/product_view.php

// Use $product to display the product.
print_r($product);