Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> walidacja błędów
dantekir
post
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 14.06.2004
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Witam,

Potrzebuję pomocy w zrozumieniu w jaki sposób kontrolować dane wejściowe w odpowiednich klasach.
Dopiero raczkuję z obiektowym więc porszę o wyrozumiałość...

Stworzyłem interfejs Validator z funkcją validate()
Interfejs jest zaimplementowany w klasie PropertyObject która wygląda tak:

  1. <?php
  2. abstract class PropertyObject implements Validator
  3. {
  4.  
  5.  /** Aggregations: */
  6.  
  7.  /** Compositions: */
  8.  
  9.   /*** Attributes: ***/
  10.  
  11.  /**
  12.    *
  13.    * @access protected
  14.    */
  15.  
  16.  protected $propertyTable =array ();
  17.  protected $changedProperties= array();
  18.  protected $data;
  19.  protected $errors = array();
  20.  
  21.  
  22.  public function __construct($arData){
  23.      $this->data=$arData;
  24.  }
  25.  
  26.  function __get($propertyName){
  27.      if(!array_key_exists($propertyName, $this->propertyTable))
  28.            throw new Exception("Błędna własność \"$propertyName\"!");
  29.  
  30.      if(method_exists($this, 'get'.$propertyName)){
  31.          return call_user_func(array($this, 'get'.$propertyName));
  32.      } else {
  33.          //print ('nie ma funkcji '.$propertyName.'<br>');
  34.          return $this->data[$this->propertyTable[$propertyName]];
  35.      }
  36.  }
  37.  
  38.  function __set($propertyName, $value){
  39.      if(!array_key_exists($propertyName, $this->propertyTable))
  40.        throw new Exception("Błędna własność \"$errors[$propertyName]\"");
  41.      if(method_exists($this, 'set'.$propertyName)){
  42.          return call_user_func(
  43.              array($this,'set'.$propertyName),
  44.              $value
  45.          );
  46.      } else {
  47.          //jeżeli wartość własności uległa zmianie i nie ma jej
  48.          //jeszcze w tabeli chengedProperties, zostanie do niej dołączona
  49.          if($this->propertyTable[$propertyName]!=$value &&
  50.              !in_array($propertyName,$this->changedProperties)){
  51.                $this->changedProperties[]=$propertyName;
  52.              }
  53.          $this->data[$this->propertyTable[$propertyName]] = $value;
  54.      }
  55.  }
  56.  
  57.  
  58.  /**
  59.    *
  60.    *
  61.    * @return
  62.    * @access public
  63.    */
  64.  function validate( ) {
  65.      
  66.  } // end of member function validate
  67.  
  68. } // end of PropertyObject
  69. ?>



Dziedziczę klasę w konkretnym obiekcie np:

  1. <?php
  2. class WareHouse extends PropertyObject
  3. {
  4.  
  5.  /** Aggregations: */
  6.  
  7.  /** Compositions: */
  8.  
  9.   /*** Attributes: ***/
  10.  
  11.  /**
  12.    *
  13.    * @access private
  14.    *  
  15.   private $entity = array();
  16.   private $id_warehouse;
  17.    */
  18.    private $category = array();
  19.  
  20.  
  21.  public function __construct($id_warehouse){
  22.      $this->propertyTable['WareHouseID']=$id_warehouse;
  23.  }
  24.  
  25. ....
  26.  
  27.  public function validate(){
  28.      if(!$this->WareHouseID){
  29.          $this->errors['WareHouseID']='Brak id dla magazynu';
  30.      }
  31.      if(sizeof($this->errors)){
  32.          return false;
  33.      } else {
  34.          return true;
  35.      }
  36.  }
  37.  
  38.  
  39. } // end of WareHouse
  40. ?>


Do tablicy errors[] zbieram informacje o ewentualnych błędach.
Przykład jest przerobiony z książki niestety nie mam tam informacji jak w tym przykładzie wyciągnąć dane z tej tablicy - w przypadku gdy nie jest ona pusta.

Dodam, że mam inne klasy które w zasadzie składają się na obiekt WareHouse i tam również implementuję funkcję validate()
Pytanie które mnie gnębi to jak tego użyć? Tak aby w przypadku wprowadzenia błędnych danych pojawiała się odpowiednia informacja.

Ten post edytował dantekir 19.06.2009, 14:52:09


--------------------
...albo jesteś zerem albo jedynką ;)
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 04:54