![]() |
![]() |
![]() ![]()
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 |
|
|
![]() |
![]()
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ł
potem sobie to możesz wyłapywać:
|
|
|
![]()
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. :-)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 18:05 |