E-learn.ro
Panou utilizatori
Utilizator Parola
Creeaza cont nou    Recupereaza parola
Login
Newsletter
Introdu adresa ta de email
Inscrie-te
Inchide panoul de utilizatori
Add to Google

Tutoriale PHP

Descarca toolbar

Toolbar E-learn.ro Facebook Twitter

WEB DEVELOPMENT  /  PHP  /  Zend Framework (5)

Implementarea unui modul de stiri in Zend Framework. Partea a II-a - Modelul, adaugarea si stergerea

08.03.2010
Implementarea unui modul de stiri in Zend Framework. Partea a II-a - Modelul, adaugarea si stergerea

In acest tutorial ne vom ocupa de implementarea unui model extins din clasa Zend_Db_Table_Abstract, apoi vom crea controller-ul principal si vom adauga actiunile pentru adaugarea si stergerea stirilor.

Total vizualizari: 5894 5894 afisari   |   Comentarii  0   |   Rating   |   (8 voturi)   |   Timp necesar: 40 min 40 min   |   Nivel de cunostiinte necesar: Avansat  Avansat

Autor: alexandra Expert
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
1
comenteaza printeaza

In acest tutorial ne vom ocupa de implementarea unui model extins din clasa Zend_Db_Table_Abstract, apoi vom crea controller-ul principal si vom adauga actiunile pentru adaugarea si stergerea stirilor.

Aceasta reprezinta a doua parte din seria de tutoriale "Implementarea unui modul de stiri in Zend Framework", deci, daca nu ai parcurs prima parte, o poti accesa aici.

Modelul News

Pentru inceput, avem nevoie de un model care sa faca legatura cu tabelul STIRI care se afla in baza de date. Acesta este de fapt o clasa copil a Zend_Db_Table_Abstract, ce reprezinta baza pentru orice model din Zend Framework si implementeaza o serie de metode pentru lucrul cu tabele. Cateva dintre cele mai utilizate functii are acestei clase sunt:

  • insert($arrData) - are ca parametru un array asociativ de tipul nume_coloana => valoare, pe care il insereaza ca un rand in tabela;
  • update($arrData,$where) - are ca parametri un array asociativ de tipul nume_coloana => valoare si un sir de caractere ce reprezinta o conditie, utilizate pentru a forma un query UPDATE;
  • delete($where) - sterge toate randurile ce indeplinesc conditia $where;
  • fetchAll($where), fetchRow($where) - formeaza interogari de tip SELECT pentru citirea informatiilor din tabela.

Acestea fiind spuse, in directorul models vom crea un fisier denumit NewsModel.php, in care vom scrie urmatorul cod:

<?php
 
class NewsModel extends Zend_Db_Table_Abstract {
 
 //------------------------ PROPERTIES DECLARATION -------------//
 
 public $_name = 'STIRI'; 
 
 public $_primary = array('Id');  // sau $_primary = 'Id';
}
?>

Dupa cum poti observa, proprietatea _name este initializata cu numele tabelei MySQL. In cazul in care aceasta lipseste, numele tabelei este initializat in mod implicit cu numele clasei.

Pentru a defini cheia primara avem nevoie de proprietatea _primary. Aceasta poate lua ca valoare fie un sir de caractere cu denumirea coloanei ce reprezinta cheia primara, fie un array de string-uri daca tabela are mai multe chei primare.

In cazul in care logica aplicatiei necesita initializari suplimentare la declararea unui obiect, acestea se vor face in metoda init(), ce este apelata in mod automat dupa ce toate metadatele tabelului au fost procesate. Este recomandat sa utilizezi aceasta medota in locul __construct.

Ca exemplu, am adaugat o proprietate suplimentara _columns, in care vom retine toate coloanele tabelei noastre. Pentru aceasta, in metoda init() am preluat informatiile ce ne intereseaza din obiectul curent si le-am memorat in _columns.

<?php
 
protected $_columns = array();
 
public function init() {
  
  $infoDBTabel = $this->info();
  $this->_columns = $infoDBTabel['cols'];
  
}
?>

Ca ultima observatie, retine ca pentru a putea utiliza un model trebuie sa instantiezi clasa astfel:

<?php 
$NewsModel = new NewsModel();
?>

dupa care vom putea apela diversele metode din Zend_Db_Table_Abstract.

Controller-ul principal si view-ul implicit

Acum ca avem modelul, putem incepe sa scriem codul pentru controller-ul principal. Mai intai, in directorul controllers vom crea fisierul IndexController.php. Denumirea IndexController specifica faptul ca acesta este controller-ul default, ce va fi apelat in mod automat la accesarea url-ului http://numedomeniu.ro/public.

Pentru inceput, vom scrie urmatorul cod:

<?php 
 
class IndexController extends Zend_Controller_Action {
 
    public function indexAction() {
    
        // afiseaza prima pagina cu zend view
        $viewObject = new Zend_View();
        $viewObject->setScriptPath(APPLICATION_PATH.'views/');
        
        echo $viewObject->render("index.phtml");
    
    }//end of indexAction() method
}?>

Dupa cum poti observa, am definit actiunea index, ce are rolul de a incarca si de a afisa continutul fisierului index.phtml din directorul views. Aceasta functie este de asemenea apelata automat, deci pentru a o rula este de ajuns sa accesezi directorul public. Cu alte cuvinte, caile:

http://numedomeniu.ro/public/

si

http://numedomeniu.ro/public/index/index/

sunt echivalente.

Pentru ca momentan nu avem nici un template (in afara celui de eroare), in directorul views vom defini fisierul index.phtml cu urmatorul continut:

 
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Modul de stiri in ZF</title>
<link type="text/css" rel="stylesheet" href="<?php echo DIR_LOCALPATH;?>styles/style.css" />
</head>
 
<body>
<div align="left" style="padding:50px;">
 <h1>Modul de stiri</h1>
 
 <ul>
  <li><a href="<?php echo DIR_LOCALPATH?>index/add">Adaugare stire</a></li>
  <li><a href="<?php echo DIR_LOCALPATH?>index/view">Vizualizare / editare stiri</a></li>
 </ul>
</div>
</body>
</html>

Browserul va afisa:

Implementarea unui modul de stiri in Zend Framework. Partea a II-a - Modelul, adaugarea si stergerea

Dupa cum poti vedea, acest fisier cuprinde un meniu foarte simplu care ne trimite catre paginile de adaugare si vizualizare stiri. Retine ca pentru celelalte actiuni din controller-ul Index va trebui sa specifici calea completa, inclusiv denumirea controller-ului (de exemplu http://numedomeniu.ro/public/index/add sau http://numedomeniu.ro/public/index/view).

Adaugarea unei stiri

In primul rand, pentru adaugare va trebui sa afisam un formular care sa contina campurile titlu, data, descriere si continut ce vor fi salvate in baza de date. In directorul views vom crea fisierul add.phtml cu urmatorul cod html:

 
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Modul de stiri in ZF</title>
<link type="text/css" rel="stylesheet" href="<?php echo DIR_LOCALPATH;?>styles/style.css" />
</head>
 
<body>
<div align="left" style="padding:50px;">
 
<ul style="padding:0px;margin:0px;">
 <li><a href="<?php echo DIR_LOCALPATH?>">Inapoi la prima pagina</a></li>
</ul>
 
<h1>Adaugare stire</h1>
 
<form name="addform" id="addform" action="<?php echo DIR_LOCALPATH?>index/addsave" method="post" enctype="multipart/form-data">
 <table width="100%" border="0" cellpadding="2" cellspacing="2">
  <tr>
   <td width="120">Titlu</td>
   <td><input type="text" name="title" id="title" /></td>
  </tr>
  <tr>
   <td>Data</td>
   <td><input type="text" name="date" id="date" value="<?php echo date('Y-m-d');?>" /></td>
  </tr>
  <tr>
   <td valign="top">Descriere</td>
   <td><textarea name="description" id="description" rows="5" cols="70"></textarea></td>
  </tr>
  <tr>
   <td valign="top">Continut</td>
   <td><textarea name="content" id="content" rows="10" cols="70"></textarea></td>
  </tr>
  <tr>
   <td> </td>
   <td><input type="submit" name="submitBtn" id="submitBtn" value="Salveaza" /></td>
  </tr>
 </table>
</form>
</div>
</body>
</html>

Ca observatie, poti vedea ca formularul de adaugare cuprinde atat un link de revenire la pagina principala, cat si un buton de submit care va transmite informatia catre actiunea addsave din controllerul Index. Pentru a-l afisa, in controller vom adauga urmatoarea metoda:

<?php
public function addAction() {
  
    // afiseaza formularul de adaugare cu zend view
    $viewObject = new Zend_View();
    $viewObject->setScriptPath(APPLICATION_PATH.'views/');
    
    echo $viewObject->render("add.phtml");
    
}//end of addAction() method
?>

Browserul va arata urmatoarea pagina:

Implementarea unui modul de stiri in Zend Framework. Partea a II-a - Modelul, adaugarea si stergerea

Actiunea addsave este ceva mai complicata:

<?php
public function addsaveAction() {
    
    // verifica daca avem date transmise prin formular in POST
    if($this->getRequest()->isPost()) {
    
    $POST = $this->getRequest()->getPost();    
    
    if(!empty($POST)) {
    
            // construieste un array cu informatiile din post
            $arrData = array(
                    'Titlu' =>   $POST['title'],
                    'Data' =>   $POST['date'],
                    'Descriere' =>  $POST['description'],
                    'Continut' =>  $POST['content']
            ); 
            
            // insereaza stirea in baza de date
            $NewsModel = new NewsModel();  
            $lastInsertedRowId = $NewsModel->insert($arrData);        
        }
    }
    
    // afiseaza mesajul de succes cu zend view
    $viewObject = new Zend_View();
    $viewObject->setScriptPath(APPLICATION_PATH.'views/');
    
    echo $viewObject->render("save.phtml");
    
}//end of addsaveAction() method
?>

In primul rand, am preluat datele din formular utilizand metoda getRequest() a controller-ului, apoi am construit un array asociativ cu informatiile din post si l-am salvat in baza de date cu ajutorul functiei insert a modelului News. Dupa ce am terminat, am afisat un mesaj de succes cu ajutorul unui view suplimentar denumit save.phtml:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Modul de stiri in ZF</title>
<link type="text/css" rel="stylesheet" href="<?php echo DIR_LOCALPATH;?>styles/style.css" />
</head>
 
<body>
<div align="left" style="padding:50px;">
 
<ul style="padding:0px;margin:0px;">
 <li><a href="<?php echo DIR_LOCALPATH?>">Inapoi la prima pagina</a></li>
 <li><a href="<?php echo DIR_LOCALPATH?>index/view">Inapoi la vizualizare stiri</a></li>
</ul>
 
<h1>Salvare stire</h1>
 
<table width="100%" border="0" cellpadding="0" cellspacing="0">
 <tr>
  <td>Stirea a fost salvata cu succes.</td>
 </tr>
</table>
</div>
</body>
</html>

Stergerea unui stiri

Pentru a sterge o stire avem nevoie de o singura actiune care sa accepte ca parametru id-ul randului pe care vrem sa il stergem:

<?php
public function deleteAction() {
        
    // verifica daca id-ul stirii a fost transmis ca parametru
    if(is_numeric($this->_request->getParam('id')) && $this->_request->getParam('id') != 0) {
        
        // sterge din baza de data stirea cu id-ul corespunzator
        $NewsModel = new NewsModel();
        $NewsModel->delete('Id = '.$this->_request->getParam('id'));
    }
    
    // afiseaza mesajul de succes cu zend view
    $viewObject = new Zend_View();
    $viewObject->setScriptPath(APPLICATION_PATH.'views/');
    
    echo $viewObject->render("delete.phtml");
    
}//end of deleteAction() method

In browser, parametrul id este concatenat caii care duce catre actiunea respestiva astfel:

http://numedomeniu.ro/public/index/delete/id/4

Bineinteles, in template-ul delete.phtml afisam un mesaj si linkuri catre celelalte pagini:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Modul de stiri in ZF</title>
<link type="text/css" rel="stylesheet" href="<?php echo DIR_LOCALPATH;?>styles/style.css" />
</head>
 
<body>
<div align="left" style="padding:50px;">
 
<ul style="padding:0px;margin:0px;">
    <li><a href="<?php echo DIR_LOCALPATH?>">Inapoi la prima pagina</a></li>
    <li><a href="<?php echo DIR_LOCALPATH?>index/view">Inapoi la vizualizare stiri</a></li>
</ul>
 
<h1>Salvare stire</h1>
 
<table width="100%" border="0" cellpadding="0" cellspacing="0">
    <tr>
        <td>Stirea a fost stearsa cu succes.</td>
    </tr>
</table>
</div>
</body>
</html>

Aici se incheie acest tutorial. In ultima parte veti putea citi atat despre citirea din baza de date si vizualizarea stirilor, cat si despre modificarea acestora.

Pagina:
1
comenteaza printeaza

Cuvinte cheie:   php,   mysql,   zend framework,   stiri,   model,   view,   controller,   adaugare,   stergere,   phtml,   param,   post,   formular,   request,   zend_db

Alte tutoriale PHP:
Noteaza acest tutorial
Rating tutorial
 
(8 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
Posteaza un comentariu
Pentru a posta un comentariu, trebuie sa fii logat!
0 TOP UTILIZATORI* 0 0
Tutoriale scrise de claibornelara
claibornelara Rang utilizator claibornelara - Incepator
5030
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
4985
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4830
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
4805
Tutoriale scrise de beacherrosa
beacherrosa Rang utilizator beacherrosa - Incepator
4605
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
PSD Python Lightroom Ruby on Rails AJAX Word JSON CSS PHP RoR Fireworks Fotografie SWF XML StyleSheet HTML SEO Sony Vegas Java Outlook Swift 3D Excel Illustrator Dreamweaver Photoshop MySQL Flash Verilog Action Script Bridge XHTML Powerpoint Javascript Gimp Vista COREL DRAW
Promovare:
Daca faci parte din comunitatea E-learn.ro si doresti promovarea acesteia, poti accesa pagina de promovare.
Arhiva newsletter:
Daca ai ratat un numar mai vechi, sau vrei sa revezi care au fost noutatile E-learn.ro la un moment dat, poti accesa arhiva de newslettere.
  Copyright © 2008-2013 E-LEARN.ro. Toate drepturile rezervate. Termeni si conditii.
Conceput si realizat de Neokinetics Software