Autor | Zpráva | ||
---|---|---|---|
martin20a Profil |
#1 · Zasláno: 14. 6. 2012, 15:14:12
Dobrý den,
chtěl bych poprosit o radu. Chci si nastavit defaultní hodnoty pro phpMailer, tyto hodnoty mám v databázi aby se mohli měnit v RS. Jak by to bylo aby fungovalo je: class MyPhpMailer extends PHPMailer { // DEFAULT VARIABLES var $Host = "smtp.savana.cz"; // zadáme adresu SMTP serveru var $SMTPAuth = true; // nastavíme true v případě, že server vyžaduje SMTP autentizaci var $Username = "***"; // uživatelské jméno pro SMTP autentizaci var $Password = "***"; // heslo pro SMTP autentizaci var $From = "email@email.cz"; // adresa odesílatele var $FromName = "Jméno webu"; // jméno odesílatele } Jenže já potřebuji tam mít data z databáze, takže jsme si to přepsal na: class MyPhpMailer extends PHPMailer { public $val; $val = new SettingsValue; // DEFAULT VARIABLES $Host = $val->getValue('smtp_host'); $SMTPAuth = true; $Username = $val->getValue('smtp_name'); $Password = $val->getValue('smtp_pass'); $From = $val->getValue('mail_email'); $FromName = $val->getValue('mail_from_name'); } Jenže samozřejmě to takto nemůžu udělat, jelikož to musí být v metodě, jenže zas když to obalím do konstruktéru, tak to nefunguje. Ještě dolňuji třídu pro získání dat z tabulky: class SettingsValue { public $array; public function __construct() { $result = dibi::query("SELECT value, name FROM settings"); foreach ($result as $key => $row) { $this->array[$row['name']] = $row['value']; } } public function getValue($name) { return $this->array[$name]; } } Děkuji za každou pomoc. S OOP teprve začínám, děkuji.[pre][/pre] |
||
Tori Profil |
#2 · Zasláno: 14. 6. 2012, 15:27:41
Někde mimo PhpMailer si načtěte data z DB do pole a to pak předejte konstruktoru:
class MyPhpMailer extends PHPMailer { public function __construct(array $defaults = array(), $useExceptions = false) { // nastavení, jestli má PhpMailer vyhazovat výjimky nebo obyč. chyby parent::__construct($useExceptions); // ostatní nastavení $this->Host = $defaults['smtp_host']; // ... atd. pro každou hodnotu } } |
||
martin20a Profil |
#3 · Zasláno: 14. 6. 2012, 16:19:39
Tori:
„Někde mimo PhpMailer si načtěte data z DB do pole a to pak předejte konstruktoru:“ Tak nakonec jsem zjistil že jsem tam pak v konstruktéru jen zapomněl dát this, takže to mám takto: class MyPhpMailer extends PHPMailer { public $val; public function __construct() { $val = new SettingsValue; // DEFAULT VARIABLES $this->Host = $val->getValue('smtp_host'); $this->SMTPAuth = true; $this->Username = $val->getValue('smtp_name'); $this->Password = $val->getValue('smtp_pass'); $this->From = $val->getValue('mail_email'); $this->FromName = $val->getValue('mail_from_name'); $this->CharSet = "utf-8"; $this->WordWrap = 60; } } nevím jestli je to lepší tím tvým způsobem nebo takto jak jsem to udělal. Každopádně pokud mě tam něco chybí nebo cokoliv mám blbě tak uvítám kritiku s vysvětlením problematiky. Děkuji |
||
Tori Profil |
#4 · Zasláno: 14. 6. 2012, 16:39:54
[#3] není úplně dobré řešení kvůli tomu, že
1. konstruktor vyžaduje existenci nějaké třídy SettingsValue, aniž by tuhle závislost nějak navenek dával najevo (např. že by požadoval jako parametr instanci této třídy) 2. zcela zakrývá 1. parametr rodičovského konstruktoru a neumožňuje tedy změnu způsobu reakce na chyby. A teď koukám na PHPMailer, že vlastně ty proměnné jsou veřejné. Takže by mělo jít i tohle: $settings = new SettingsValue; $mailer = new PHPMailer; $mailer->Host = $settings->getValue('smtp_host'); // ... atd. |
||
martin20a Profil |
#5 · Zasláno: 14. 6. 2012, 16:56:12
Tori:
„není úplně dobré řešení kvůli tomu, že“ Ok děkuji zkusím si s tím pohrát :-) |
||
Časová prodleva: 12 let
|
0