2012-02-16 4 views
0

Je le code suivant dans « IndexController.php »:Zend Framework - requêtes dans le contrôleur

$sql = 'SELECT * FROM ?'; 
$stmt = new Zend_Db_Statement_Mysqli($db, $sql); 
$this->view->projects = $stmt->execute(array('projects')); 

... qui est juste utilisé pour récupérer tous les objets du projet de la base de données et de les transmettre à la vue . Cependant quand je lance ce code, je reçois l'erreur suivante:

Notice: Undefined variable: db in C:\wamp\www\PROJECTS_Zend\projectManager\application\controllers\IndexController.php on line 19 

Fatal error: Call to a member function quoteIdentifier() on a non-object in C:\wamp\www\PROJECTS_Zend\projectManager\library\Zend\library\Zend\Db\Statement.php on line 181 

Je ne suis pas sûr de ce que db variable est ou ce qu'elle devrait être, mais si vous avez des informations sur ce que je serais reconnaissant si vous pouviez éclaire-moi.

+0

est-ce pas ce que le modèle est pour (pas une réponse que je sais)? – PeeHaa

+0

Voulez-vous dire que je devrais mettre ce code dans le modèle? –

+0

En zend nous avons Model, View, Controller. Nous utilisons essentiellement le modèle pour les choses liées à la base de données. Et je ne recommande pas d'écrire des instructions SQL dans le contrôleur de toute façon. Vous pouvez utiliser certaines classes dans ce cas. Cela rendra votre code parfait. Pour répondre à votre question, pourriez-vous mettre le code que vous avez utilisé pour initialiser l'objet '$ db'? –

Répondre

1

Ainsi, vous ruinez tout le concept M (odel) du MVC.

Anyways $ db est une instance de Zend_Db. Je vous conseillerais de lire http://framework.zend.com/manual/en/zend.db.adapter.html.

Bien que cela puisse conduire à un code terrible:

$db = new Zend_Db_Adapter_Pdo_Mysql(array(
    'host'  => '127.0.0.1', 
    'username' => 'webuser', 
    'password' => 'xxxxxxxx', 
    'dbname' => 'test' 
)); 
+0

Ok !! Donc, une fois que je crée cet objet $ db, mon code devrait fonctionner? –

+0

Je ne pense pas que vous compreniez: il devrait être dans un modèle, pas votre contrôleur. –

+0

Ok Est-ce que je place ce code $ db dans le haut de ma classe de modèle? Merci! –

2

requêtes dans les cadres MVC comme Zend, Kohana et Codeigniter doivent être faites dans la classe "Modèle".

Pas la classe de contrôleur!

Les classes de modèle gèrent les données d'un magasin de données comme une base de données ou un fichier.

Vous devriez le faire dans la classe du modèle, car il aura toutes les fonctionnalités étendues de la classe Zend_Db

$ db est votre variable qui contient tous les détails pour vous connecter à votre base de données (nom d'hôte, nom d'utilisateur, passez, nom de base de données)

Vous devez définir plus tôt dans votre code

Une chose à propos de MVC

  • Vous devriez avoir FAT MODELS qui gèrent beaucoup de données.
  • Vous devriez avoir contrôleurs Paranoid qui gèrent tous les processus
  • Vous devriez avoir Vues DUMB qui cant rien faire important!

Hope this helps :)

Questions connexes