我是开发和 Zend 框架的新手。我对这个问题发疯了,我不知道为什么它不起作用。
我的应用程序是一个手机管理。我有 2 个课程:“Fabriquant”和“Modele”。因此,例如,我有一个带有 Fabriquant:Apple 和 Modele:iPhone 4S 的移动设备。
我想显示我的数据库中记录的所有移动设备的列表。我必须在我的视图中找到每个“Modele”的“Fabriquant”数据。
这是我的代码:
index.phtml
<table>
<tr>
<th>Fabriquant</th>
<th>Modèle</th>
<th> </th>
</tr>
<?php
foreach($this->modele as $modele) : ?>
<tr>
<td><?php echo $this->escape($modele->getFabriquant()->FAB_NOM); // $modele->FAB_ID affiche bien l'ID du fabriquant></td>
<td><?php echo $this->escape($modele->MOD_NOM);?></td>
<td>
<a href="<?php echo $this->url(array('controller'=>'modele',
'action'=>'modifier', 'id'=>$modele->MOD_ID));?>">Modifier</a>
<a href="<?php echo $this->url(array('controller'=>'modele',
'action'=>'supprimer', 'id'=>$modele->MOD_ID));?>">Supprimer</a>
</td>
</tr>
<?php endforeach; ?>
</table>
所以这条线有问题:
转义($modele->getFabriquant()->FAB_NOM);
我的 Fabriquant.php:类 Application_Model_DbTable_Fabriquant 扩展 Zend_Db_Table_Abstract {
protected $_name = 'fabriquant';
protected $_primary = 'FAB_ID'; // La primary key
protected $_fabNom = 'FAB_NOM';
这是我的 Modele.php: 类 Application_Model_DbTable_Modele 扩展 Zend_Db_Table_Abstract {
protected $_name = 'modele'; // Le nom de la table dans la BDD
protected $_primary = 'MOD_ID'; // La clef primaire dans la table de la BDD
protected $_fabId = 'FAB_ID';
protected $_modNom = 'MOD_NOM';
protected $_rowClass = 'ModeleRow'; //Le nom de la classe Zend_Db_Table_Row_Abstract
protected $_referenceMap = array( // La table fabriquant dépendante
'fabriquant' => array(
'columns' => 'FAB_ID', // Colonne de la clé primaire
'refTableClass' => 'Fabriquant', // Nom de la CLASSE correspondante
'refColumns' => 'FAB_ID'
)
);
...
这是我的 ModeleRow.php: 类 ModeleRow 扩展 Zend_Db_Table_Row_Abstract {
public function getFabriquant(){
$fabriquant = $this->findParentRow('fabriquant');
}
}
我有此错误消息和以下堆栈:
Message: Unrecognized method 'getFabriquant()'
Stack trace:
#0 D:\PHP Workspace\mona\application\views\scripts\modele\index.phtml(21): Zend_Db_Table_Row_Abstract->__call('getFabriquant', Array)
#1 D:\PHP Workspace\mona\application\views\scripts\modele\index.phtml(21): Zend_Db_Table_Row->getFabriquant()
#2 C:\wamp\www\ZendFramework-1.11.11\library\Zend\View.php(108): include('D:\PHP Workspac...')
#3 C:\wamp\www\ZendFramework-1.11.11\library\Zend\View\Abstract.php(888): Zend_View->_run('D:/PHP Workspac...')
#4 C:\wamp\www\ZendFramework-1.11.11\library\Zend\Controller\Action\Helper\ViewRenderer.php(900): Zend_View_Abstract->render('modele/index.ph...')
#5 C:\wamp\www\ZendFramework-1.11.11\library\Zend\Controller\Action\Helper\ViewRenderer.php(921): Zend_Controller_Action_Helper_ViewRenderer->renderScript('modele/index.ph...', NULL)
#6 C:\wamp\www\ZendFramework-1.11.11\library\Zend\Controller\Action\Helper\ViewRenderer.php(960): Zend_Controller_Action_Helper_ViewRenderer->render()
#7 C:\wamp\www\ZendFramework-1.11.11\library\Zend\Controller\Action\HelperBroker.php(277): Zend_Controller_Action_Helper_ViewRenderer->postDispatch()
#8 C:\wamp\www\ZendFramework-1.11.11\library\Zend\Controller\Action.php(527): Zend_Controller_Action_HelperBroker->notifyPostDispatch()
#9 C:\wamp\www\ZendFramework-1.11.11\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('indexAction')
#10 C:\wamp\www\ZendFramework-1.11.11\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#11 C:\wamp\www\ZendFramework-1.11.11\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch()
#12 C:\wamp\www\ZendFramework-1.11.11\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#13 D:\PHP Workspace\mona\public\index.php(98): Zend_Application->run()
#14 {main}
我想这将是一个新手问题,但我已经解决了 2 天,但我没有找到问题......非常感谢您的帮助!
编辑:这是我的 ModeleController.php (对不起,这是我所有的个人评论......)
类 ModeleController 扩展 Zend_Controller_Action {
public function init()
{
/* Initialize action controller here */
}
public function indexAction()
{
Zend_Loader::loadClass("Modele", APPLICATION_PATH . "/models"); // indique l'emplacement du modèle
//require_once 'FabriquantController.php';
$this->view->title = "Liste des modèles"; // le titre affiché
// Traitement du controleur
$modele = new Modele();
//.....traitement...
// Transmet à la vue
$this->view->modele = $modele->fetchAll();
}
public function ajouterAction()
{
$this->view->title = "Ajouter un nouveau modèle";
$form = new Application_Form_Modele(); // Création du formulaire
//var_dump($form);
$form->envoyer->setLabel('Ajouter'); // Ajout d'un libellé au bouton d'envoi
$this->view->form = $form;
if ($this->getRequest()->isPost()) {
$formData = $this->getRequest()->getPost();
if ($form->isValid($formData)) {
$fabAccessData = new Application_Model_DbTable_Fabriquant();
$idFab = $form->getValue('FAB_NOM');
$nomModele = $form->getValue('MOD_NOM');
$accessData = new Application_Model_DbTable_Modele();
$accessData->ajouterModele($idFab, $nomModele);
$this->_helper->redirector('index');
} else {
$form->populate($formData);
}
}
}
public function lireAction()
{
// action body
}
public function supprimerAction()
{
if ($this->getRequest()->isPost()) {
$del = $this->getRequest()->getPost('del');
if ($del == 'Oui') {
$id = $this->getRequest()->getPost('id');
$modele = new Application_Model_DbTable_Modele();
$modele->supprimerModele($id);
}
$this->_helper->redirector('index');
} else {
$id = $this->_getParam('id', 0);
$modele = new Application_Model_DbTable_Modele();
$this->view->modele = $modele->getModele($id);
}
}
public function modifierAction()
{
$this->view->title = "Modifier un modèle";
$form = new Application_Form_Modele(); // Création du formulaire
$form->setAction($this->view->url(array('controller' => 'modele', 'action' => 'modifier'), 'default', true));
$form->envoyer->setLabel('Modifier'); // Ajout d'un libellé au bouton d'envoi
$this->view->form = $form; // Envoi du formulaire à la vue
if ($this->getRequest()->isPost()) { // si la méthode isPost de l'objet Request renvoi True, le formulaire à été envoyé
$formData = $this->getRequest()->getPost(); // Récupération des données avec la méthode getPost()
if ($form->isValid($formData)) { // Vérification de ces données avec la méthode isValid()
$id = (int)$form->getValue('MOD_ID'); // Récupération de l'ID du fabriquant
$nomFabriquant = $form->getValue('FAB_NOM');
$fabriquant = new Application_Model_DbTable_Fabriquant();
$idFabriquant = $fabriquant->getIdFabricant($nomFabriquant);
$nomModele = $form->getValue('MOD_NOM'); // On récupère le nom du fabriquant
$modele = new Application_Model_DbTable_Modele(); // On créé un nouvel enregistrement
$modele->modifierModele($id, $idFabriquant, $nomModele); // On affecte à cet enregistrement le nom du fabriquant, et on persiste en BDD
$this->_helper->redirector('index'); // pour finir, on redirige vers index de Fabriquant
} else {
$form->populate($formData); // Si la validation n'est pas passée, on réaffiche les données dans le formulaire
}
}
else {
$id = $this->_getParam('id', 0);
//var_dump($id);
if ($id > 0) {
$modele = new Application_Model_DbTable_Modele();
$fabriquant = new Application_Model_DbTable_Fabriquant();
$Fabriquant = $fabriquant->getFabriquant($id);
$nomFabriquant = $Fabriquant['FAB_NOM'];
//var_dump($nomFabriquant);
$nomModele = $modele->getModele($id);
echo "L'ID du modèle est : " . $id; // Vérification
//echo "L'ID du fabriquant est : " . $nomFabriquant['FAB_NOM']; // Vérification
$form->populate($nomModele, $nomFabriquant);
//$form->populate($nomFabriquant);
} else {
echo "Information : nous sommes dans le else de modifierAction de FabriquantController.php";
echo "L'ID est : " . $id;
}
}
}
}