Mail/Message default setFrom z configu
- monty
- Člen | 66
Ahoj.
Marně se snažím vyřešit jednu věc a už mi ze všech těch předávání závislostí a vazeb asi praskne hlava, takže se obracím na Vás, zkušenější :)
Rád bych si při vytváření zpráv pro Mailer natahoval výchozího odesílatele z configu, abych při přechodu na produkční server změnil jen jeden parametr.
Vytvořil jsem si službu, a do ní, za pomoci DI, konstruktorem předal parametr definovaný v local configu, ale pak mi došlo, že když budu chtít v presenteru vytvořit víc mailů, už nevím, jakým způsobem paremtr předat.
Budu vděčný za každou radu.
Díky
Peťa
Editoval monty (5. 12. 2017 21:51)
- Pavel Kravčík
- Člen | 1196
Pokud máš parametr ve službě, tak by to mělo být v pohodě. Jakože bys měnil výchozí odesílatele v závislosti na datech či mailu?
- monty
- Člen | 66
Pavel Kravčík napsal(a):
Pokud máš parametr ve službě, tak by to mělo být v pohodě. Jakože bys měnil výchozí odesílatele v závislosti na datech či mailu?
Jde mi o to, aby mi při vytváření mailu a nezadání setFrom, Nette použilo výchozího odesílatele, kterého bych si rád nastavil právě přes ten config. A ano, v případě potřeby bych si ho klidně změnil v rámci objektu.
Upřesním ještě v čem tkví můj problém.
Všechno mi funguje tak, jak má, jenže jen v případě, že se objekt
vytvoří přes DI..
/** config **/
services:
mail:
class: App\Services\Mail(%defaults%)
parameters:
defaults:
from: "odesilatel@domena.cz"
/** služba**/
namespace App\Services;
use Nette\Mail\Message;
class Mail extends Message {
use \Nette\SmartObject;
public function __construct(array $defaults) {
parent::__construct();
$this->setFrom($defaults["from"]);
}
}
/** presenter **/
use App\Services\Mail;
use Nette\Mail\IMailer;
class Presenter {
protected $Mail, $Mailer;
public function __construct(Mail $Mail, IMailer $Mailer) {
$this->Mail = $Mail;
$this->Mailer = $Mailer;
}
public function foo() {
/** předpokládám, že takhle by to mělo fungovat bez chyby **/
...
$this->Mail->setSubject("Test mail");
$this->Mail->setBody("Obsah test mail");
$this->Mailer->send($this->Mail);
}
public function foo2() {
/** takhle už ale ne, zahlásí chybu, že konstruktoru chybí parametr(pole),
což je logický, ale nevím, jak jinak z configu parametr získat **/
$mail= new Mail();
$mail->setSubject("Test mail");
$mail->setBody("Obsah test mail");
$this->Mailer->send($mail);
}
}
Zatím to řeším tak, že mám odesílatele nastaveného jako konstantu v presenteru, což ale zrovna moc globální není a zároveň asi trochu prasárna, což? :>
„Zglobalizovat“ by se to dalo ještě vytvořením nějaké „config“ třídy, kde budu sdružovat všechny společné konstanty, ale to mi přijde asi zbytečný a navíc taky značně nehezký, nebo se pletu? Když tu máme tak hezky fungující config…jen se do něj neumím dostat vždycky, když potřebuju :)
Prosím o radu z tohodle bludiště :)
Díky
P
Editoval monty (6. 12. 2017 14:45)
- Pavel Kravčík
- Člen | 1196
No a proč nepřetížíš tu metodu send v tvém Maileru? A do konstruktoru si dej nepovinný parametr, když bude chybět může ho nastavit až ten Mailer.
public function send($message)
{
$message->setFrom('tomio@spd.cz');
parent::send($message);
}
Editoval Pavel Kravčík (6. 12. 2017 15:14)
- monty
- Člen | 66
Pavel Kravčík napsal(a):
No a proč nepřetížíš tu metodu send v tvém Maileru? A do konstruktoru si dej nepovinný parametr, když bude chybět může ho nastavit až ten Mailer.
public function send($message) { $message->setFrom('tomio@spd.cz'); parent::send($message); }
No vidíš, to mě nenapadlo, nastavit si odesílatele až v Maileru.
To půjde!
Moc díky Pavle ;)
- Pavel Janda
- Člen | 977
@monty A nechceš to zkusit nějak elegantněji zabalit? :) Zkus mrknout na ublaboo/mailing. Tady je vidět konfigurace defaultního odesílate: https://ublaboo.org/…onfiguration
- monty
- Člen | 66
Pavel Janda napsal(a):
@monty A nechceš to zkusit nějak elegantněji zabalit? :) Zkus mrknout na ublaboo/mailing. Tady je vidět konfigurace defaultního odesílate: https://ublaboo.org/…onfiguration
Ahoj.
No vidíš, takhle elegantně jsem to chtěl vyřešit.
A už vyřešil :)
I když samozřejmě ne v tako sofistikovaným rozšíření :)
Děkuju za tip, možná ho využiju v další fázi.
Mějte se Pavlové ;)