NetHq Blog


A rossz legjobb kritikája az, ha megmutatjuk, hogyan kell jobban csinálni.

Zend Framework programozás alapok - listázás,szerkesztés és űrlapok

Nightvis, 2012.08.01 08:16
Létrehozunk egy list akciót. A metódus neve "listAction"a megfelelő Controllerrel. aztán létrehozunk egy VIiew-t a listázásra.

application/controllers/"UserController.PHP" . A következő lesz a metódus:

 public function listAction() {   $params = array('host'      =>'localhost',                   'username'  =>'root',                   'password'  =>'admin',                   'dbname'    =>'zend'                  );   $DB = new Zend_Db_Adapter_Pdo_Mysql($params);     $DB->setFetchMode(Zend_Db::FETCH_OBJ);     $sql = "SELECT * FROM `user` ORDER BY user_name ASC";   $result = $DB->fetchAssoc($sql);     $this->view->assign('title','Member List');   $this->view->assign('description','Below, our members:');   $this->view->assign('datas',$result);   }

 

application/views/scripts/user/list.phtml" lesz a hozzá tartozó View

<? include "header.phtml"; ?>   <h1><?=$this->escape($this->title);?></h1>   <h2><?=$this->escape($this->description);?></h2>   <a href="register">Register</a>   <table border="1">     <tr>       <th>ID</th>       <th>User Name</th>           <th>First Name</th>          <th>Last Name</th>           <th>Action</th>        </tr>   <? $datas = $this->datas;      for($i = 1; $i<= count($datas);$i++){ ?>     <tr>       <td><?=$datas[$i]['id']?></td>       <td><?=$datas[$i]['user_name']?></td>       <td><?=$datas[$i]['first_name']?></td>         <td><?=$datas[$i]['last_name']?></td>          <td>         <a href="edit/id/<?=$datas[$i]['id']?>">Edit</a>         |         <a href="del/id/<?=$datas[$i]['id']?>">Delete</a>          </td>        </tr>   <? } ?>   </table><? include "footer.phtml"; ?>

 

Itt nézhetjük meg a listát http://hostname/user/list

A fenti phtml listában látjhatjuk azt, hogyan lehet egy adott rekordot meghívni a link segítségével: (Edit és Delete bejegyzés)

Bővítsük a UserController.php fájlt az editAction() metódussal.

public function editAction(){   $params = array('host'  =>'localhost',                'username' =>'root',    'password'  =>'admin',    'dbname' =>'zend'               );    $DB = new Zend_Db_Adapter_Pdo_Mysql($params);
    $request = $this->getRequest();    $id   = $request->getParam("id");
    $sql = "SELECT * FROM `user` WHERE id='".$id."'";    $result = $DB->fetchRow($sql);
    $this->view->assign('data',$result);    $this->view->assign('action', $request->getBaseURL()."/user/processedit");    $this->view->assign('title','Member Editing');    $this->view->assign('label_fname','First Name');    $this->view->assign('label_lname','Last Name');    $this->view->assign('label_uname','User Name');    $this->view->assign('label_pass','Password');    $this->view->assign('label_submit','Edit');     $this->view->assign('description','Please update this form completely:'); 

 

Hozzuk létre a hozzá tartozó script fájlt.

<? include "header.phtml"; ?>
  <h1><?=$this->escape($this->title);?></h1>
  <div id="description">
    <?=$this->escape($this->description);?>
  </div>
  <form name="edit" method="post" action="<?=$this->escape($this->action)?>">
  <input type="hidden" name="id" value="<?=$this->data['id']?>">
  <table>
    <tr>
   <td><?=$this->escape($this->label_fname)?></td>
   <td><input type="text" name="first_name" value="<?=$this->data['first_name']?>"></td>
</tr>
    <tr>
   <td><?=$this->escape($this->label_lname)?></td>
   <td><input type="text" name="last_name" value="<?=$this->data['last_name']?>"></td>
</tr>
    <tr>
   <td><?=$this->escape($this->label_uname)?></td>
   <td><input type="text" name="user_name" value="<?=$this->data['user_name']?>"></td>
</tr>
  </table>
  <input type="submit" name="submit" value="<?=$this->escape($this->label_submit);?>">
  </form>
<? include "footer.phtml"; ?>

 

A következőekben hozzuk létre a hozzá tartozó frissítő metódust is. Használhatnánk a hagymományos SQL utasítást is, összerakva az SQL sztringet, ami létrehozza a megfelelő adatokat, de itt most inkább aZend által biztosított lehetőséget nézzük:

public function processeditAction()
{
   $params = array(
     'host'  =>'localhost',
     'username' =>'root',
     'password'  =>'admin',
     'dbname' =>'zend'
   );
   $DB = new Zend_Db_Adapter_Pdo_Mysql($params);
   $request = $this->getRequest();

   $data = array(
       'first_name' => $request->getParam('first_name'),
       'last_name' => $request->getParam('last_name'),
       'user_name' => $request->getParam('user_name'),
       'password' => md5($request->getParam('password'))
   );
   $DB->update('user', $data,'id = '.$request->getParam('id'));
   $this->view->assign('title','Editing Process');
   $this->view->assign('description','Editing succes');  
}

 

Az adatok törlése a szokott módon folytatódhatna és folytatódna is. ha hagynánk, de használjuk inkább a Zend Framework módját: Készítsük el a delAction() függvényt a UserController.php-ban

public function delAction()
{
   $params = array(

        'host'  =>'localhost',
         'username' =>'root',
         'password'  =>'admin',
    '     dbname' =>'zend'
    );
   $DB = new Zend_Db_Adapter_Pdo_Mysql($params);
   $request = $this->getRequest();

   $DB->delete('user', 'id = '.$request->getParam('id'));   //Ez a sor tölri a megadott id-jű sort a táblából

   $this->view->assign('title','Delete Data');
   $this->view->assign('description','Deleting succes');     
   $this->view->assign('list',$request->getBaseURL()."/user/list");
}

 

A következő oldalon összegezzük a UserController.php tartalmát.

Tartalom közösségi megosztása: