#zend-framework2
#zend-framework2
Вопрос:
У меня появляется это сообщение, когда я меняю идентификатор в таблице id_art в may в zend Framework 2 (я могу добавлять и удалять, но не могу обновлять):
Исключение
Fichier:
C:wampwwwzf2moduleAnnoncessrcAnnoncesModelAnnoncesTable.php:29
Message:
Could not find row 0
Pile d'exécution:
#0 C:wampwwwzf2moduleAnnoncessrcAnnoncesModelAnnoncesTable.php(48): AnnoncesModelAnnoncesTable->getAnnonces(0)
и это мой модульный скрипт:
<?php
namespace AnnoncesModel;
use ZendDbTableGatewayTableGateway;
class AnnoncesTable
{
protected $tableGateway;
public function __construct(TableGateway $tableGateway)
{
$this->tableGateway = $tableGateway;
}
//fonction qui permet d'afficher tous la table "Article"
public function fetchAll()
{
$resultSet = $this->tableGateway->select();
return $resultSet;
}
//fonction qui permet de recuperer tout les id de la table "Article"
public function getAnnonces($id)
{
$id = (int) $id;
$rowset = $this->tableGateway->select(array('id_art' => $id));
$row = $rowset->current();
if (!$row) {
throw new Exception("Could not find row $id");
}
return $row;
}
/*fonction qui permet de ajouet ou modiier un objet de type "Annonce" dans la table "Article"
en fonction de l'id*/
public function saveAnnonces(Annonces $annonces)
{
$data = array(
'titre_art' => $annonces->titre_art,
);
$id = (int) $annonces->id;
if ($id == 0) {
$this->tableGateway->insert($data);
} else {
if ($this->getAnnonces($id)) {
$this->tableGateway->update($data, array('id_art' => $id));
} else {
throw new Exception('Annonce id does not exist');
}
}
}
//fonction qui permet de supprimé un article en fonction de l'id
public function deleteAnnonces($id)
{
$this->tableGateway->delete(array('id_art' => $id));
}
}
?>
///////////////////////////Действие контроллера:
<?php
namespace AnnoncesController;
use ZendMvcControllerAbstractActionController;
use ZendViewModelViewModel;
use AnnoncesModelAnnonces;
use AnnoncesFormAnnoncesForm;
class AnnoncesController extends AbstractActionController
{
protected $annoncesTable;
public function indexAction()
{
return new ViewModel(array(
'annonces' => $this->getAnnoncesTable()->fetchAll(),
));
}
public function annonceAction()
{
return new ViewModel(array(
'annonces' => $this->getAnnoncesTable()->fetchAll(),
));
}
public function addAction()
{
$form = new AnnoncesForm();
$form->get('submit')->setValue('Add');
//fonction qui permet d'applet la méthode de création et vérification des champs de saisie de formulaire
$request = $this->getRequest();
if ($request->isPost()) {
$annonces = new Annonces();
$form->setInputFilter($annonces->getInputFilter());
$form->setData($request->getPost());
//apré la validation du formaulaire , remplir l'objet de type "Annonce" et applet la méthode "save annonces" pour ajouter ou modifier l'annonce
if ($form->isValid()) {
$annonces->exchangeArray($form->getData());
$this->getAnnoncesTable()->saveAnnonces($annonces);
// Redirect to list of annonces
return $this->redirect()->toRoute('annonces');
}
}
return array('form' => $form);
}
public function editAction()
{
//test si l'id à était saisie pour la rediriction (add/mod)
$id = (int) $this->params()->fromRoute('id', 0);
if (!$id) {
return $this->redirect()->toRoute('annonces', array(
'action' => 'add'
));
}
//appllé la fonction getAnnoce //
$annonces = $this->getAnnoncesTable()->getAnnonces($id);
$form = new AnnoncesForm();
$form->bind($annonces);
$form->get('submit')->setAttribute('value', 'Edit');
//vérification les valeur de formulaire de la page "edit"
$request = $this->getRequest();
if ($request->isPost()) {
$form->setInputFilter($annonces->getInputFilter());
$form->setData($request->getPost());
//applé la méthode "save" apré la validation de formulaire
if ($form->isValid()) {
$this->getAnnoncesTable()->saveAnnonces($form->getData());
// Redirect to list of annoncess
return $this->redirect()->toRoute('annonces');
}
}
return array(
'id' => $id,
'form' => $form,
);
}
public function deleteAction()
{
//test si l'id à était saisie pour la rediriction
$id = (int) $this->params()->fromRoute('id', 0);
if (!$id) {
return $this->redirect()->toRoute('annonces');
}
//supprimé l'article si l'utilisateur confirm l'action "del"
$request = $this->getRequest();
if ($request->isPost()) {
$del = $request->getPost('del', 'No');
if ($del == 'Yes') {
$id = (int) $request->getPost('id');
$this->getAnnoncesTable()->deleteAnnonces($id);
}
// Redirect to list of annoncess
return $this->redirect()->toRoute('annonces');
}
return array(
'id' => $id,
'annonces' => $this->getAnnoncesTable()->getAnnonces($id)
);
}
public function getAnnoncesTable()
{
//permet de recupéré les champs de la table "Article"
if (!$this->annoncesTable) {
$sm = $this->getServiceLocator();
$this->annoncesTable = $sm->get('AnnoncesModelAnnoncesTable');
}
return $this->annoncesTable;
}
}
?>
Комментарии:
1. Пожалуйста, добавьте код действия контроллера в свой вопрос, где вы вызываете
saveAnnonces()
для обновления записи.2. Я добавляю свой контроллер в свой пост @KunalDethe ! думает 🙂
3. В
public function editAction()
кажется, что$annonces
имеетid
значение, но$form->getData()
в нем его нет. Пожалуйста, сделайте это, чтобы проверить, существует лиid
значение —if ($form->isValid()) { echo "<pre>"; print_r(get_object_vars($form->getData())); exit(); [.... rest of the code ....]
. Дайте нам знать, имеет ли печатный массивid
значение.4. он не возвращает идентификатор:( => int 20 get Array ( [id] => [titre_art] => sdq)
5. @KunalDethe благодаря тебе я нашел хитрость! Я размещаю: общедоступная функция exchangeArray($data) { $this-> id = (isset($data[‘id_art’])) ? $data[‘id_art’] : null; // Я добавляю этот ligne, чтобы вернуть значение идентификатора $this-> id .= (isset($data[‘id’])) ? $data[‘id’] : null; $this-> titre_art = (isset($data[‘titre_art’])) ? $data[‘titre_art’] : null; }