Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z wyjątkami
szumigt
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 5.10.2007

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


Witam (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) !
Właśnie rozpoczynam pisanie kodu do nowego projektu katalogu internetowego. Projekt nie będzie zbyt wielki. Ma on jedynie służyć prezentacji asortymentu więc zdecydowałem się na zastosowanie Smarty i jakiejś kalsy do obsługi zapytań do MySQL-a (padło na AdoDB). W którymś momencie pisania kodu przyszła pora na obsługę błędów. Skoro mam do dyspozycji na serwerze PHP5 to postanowiłem zastosować wyjątki. I tutaj pojawił się problem. Jak zrobić klasę która będzie na podstawie danego numeru kodu błędu wyświetlać dany szablon .tpl w którym zagnieżdżona będzie odp treść wiadomości. Inaczej mówiąc klasa ta ma mieć narzucone otwieranie góra czterech szablonów (bład zapytania sql, błąd konfiguracji lub bibliotek serwisu, niewłaściwe parametry wchodzące np z GET-a i przerwa konserwacyjna) z których każdy będzie miał przekazywany jakiś tam komunikat. Ale może pokaże najpierw kod jaki do tej pory powstał a potem omówię co jeszcze.

exceptions.php
Kod
class MyException extends Exception
{
     public function __construct($code = 0) {
         parent::__construct('blad blad', $code);
     }

     public function __toString() {
         return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
     }

     public function NewErrorRedirect() {
         //tutaj funckja przekierowująca na nową stronę
     }
}


index.php
Kod
require_once 'page.php';
try {
    $str = new PageControler();
    $str->smarty -> assign("cats",$str->getCategories());
    $str->smarty -> display($str->getView());
}
catch (MyException $e) {
    die($e->NewErrorRedirect());
}


page.php
Kod
require_once 'smarty/Smarty.class.php';
require_once 'adodb/adodb.inc.php';
require_once 'exceptions.php';

class PageControler {
    private $db;
    public $smarty;
    private $settings = array();

    function getSettings() {
       $config = parse_ini_file("config.ini", TRUE);
       return $config;
    }

    function __construct() {
       $this->settings = $this->getSettings();

       $this->settings['view'] = $this->getView();
       $this->settings['id'] = $this->getId();

       $this->smarty = new Smarty();
       $this->smarty->template_dir = $this->settings['smarty']['szablony'];
       $this->smarty->compile_dir = $this->settings['smarty']['kompilacja'];
       $this->smarty->cache_dir = $this->settings['smarty']['bufor'];
       $this->db = ADONewConnection($this->settings['db']['type']);

       if(!$this->db->Connect($this->settings['db']['host'],$this->settings['db']['user'],$this->settings['db']['passwd'], $this->settings['db']['database']))

       throw new MyException (10003);
    }
    
    public function getView() {
        $this->settings['view'] = $_GET['view'];
    }

    public function getId() {
        $this->settings['id'] = $_GET['id'];
    }
}


No i na zakończenie. Problem jest taki żeby klasa PageControler przekazywała jedynie kod błędu do klasy Exception a ta będzie robiła resztę.... Chyba że takie rozwiązanie jest bezsensowne to oczywiście też chętnie posłucham uwag krytycznych :-)
Pozdr.


Nikt nie wie czy wie ale nie powie (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) :-(

Sorki ale czy to jest jakieś idiotyczne pytanie czy nikt poprostu nie wie (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Ten post edytował szumigt 18.02.2008, 19:32:47
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
em1X
post
Post #2





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


stwórz sobie kilka klas wyjątków, każdy będzie inaczej reagował

  1. <?php
  2. class sqlErrorException extends Exception {
  3.  ...
  4. }
  5.  
  6. class confErrorException extends Exception {
  7.  ...
  8. }
  9.  
  10. class parameterErrorException extends Exception {
  11.  ...
  12. }
  13. ?>


potem sobie to możesz wyłapywać:

  1. <?php
  2. try {
  3. $str = new PageControler();
  4. $str->smarty -> assign("cats",$str->getCategories());
  5. $str->smarty -> display($str->getView());
  6. }
  7. catch (sqlErrorException $e) {
  8.  // costam
  9. }
  10. catch (confErrorException $e) {
  11.  // costam
  12. }
  13. catch (parameterErrorException $e) {
  14.  // costam
  15. }
  16. ?>
Go to the top of the page
+Quote Post
szumigt
post
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 5.10.2007

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


Dzięki. Popróbuję zobaczymy z jakim efektem. :-)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 18:05