Zend Framework 2 — общий класс

#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; }