Jak nastavit více mailerů
- David Matějka
- Moderator | 6445
ten druhý budeš muset registrovat jako neautowirovanou službu:
services:
campaignMailer:
create: Nette\Mail\SmtpMailer([
username: ...
password: ...
host: ...
])
autowired: false
- SomeSerivce(@campaignMailer)
- Phalanx
- Člen | 310
Prosím, co dělám blbě?
Our\Model\Mailer Reference to missing service ‚campaignMailer‘. (used in __construct())
services:
campaignMailer:
create: Nette\Mail\SmtpMailer([
username: ...
password: ...
host: ...
])
autowired: false
- Our\Model\Mailer(@campaignMailer, ...)
<?php
class Mailer
{
/** @var SmtpMailer */
protected $campaignMailer;
/** @var IMailer */
protected $mailer;
public function __construct(
SmtpMailer $campaignMailer,
IMailer $mailer
) {
$this->campaignMailer = $campaignMailer;
$this->mailer = $mailer;
}
}
?>
- David Matějka
- Moderator | 6445
co pouziváš za verzi nette/di?
máš tu definici services v hlavním configu? nenačítáš to třeba z extension?
- David Matějka
- Moderator | 6445
jj, tak to je tím. té service se totiž přidá prefix dle názvu extension, ale odkazuješ se na ni bez toho prefixu
Ale abys tam nemusel mít hardcodovaný aktuální název, pod kterým to
registruješ (tedy nějaké @abc.campaignMailer
), můžeš použít
@extension.campaignMailer
, to extension se pak nahradí názvem
aktuální extenion
- Felix
- Nette Core | 1247
Jenom pro info, kdyby se nekomu hodilo, rada pripravenych maileru je v contributte/mail balicku.
Vice na https://contributte.org/…te/mail.html#…
- FileMailer
- SendmailMailer
- DevOpsMailer
- DevNullMailer
- CompositeMailer
- TraceableMailer
- Phalanx
- Člen | 310
@MKI-Miro Jelikož není ta služba autowired, tak si ji musíš nastavit v configu ručně pro svůj presenter.
<?php
services:
campaignMailer:
create: Nette\Mail\SmtpMailer([
username: ...
password: ...
host: ...
])
autowired: false
services:
-
create: Namespace\Presenter
setup:
- setCampaignMailer(@campaignMailer)
namespace Namespace;
class Presenter extends BasePresenter {
protected $campaignMailer;
public function setCampaignMailer($campaignMailer) {
$this->campaignMailer=$campaignMailer;
}
public renderSend()
{
// vytvor si Message $message
$this->campaignMailer->send($message);
}
}
?>
Editoval Phalanx (5. 5. 2019 17:27)
- MKI-Miro
- Člen | 279
a ako by mala vyzerá trieda campaignMailer mailer?
Tento príklad asi nie je celý nie? minimálne by to malo implementovať IMailer ?
class Mailer
{
/** @var SmtpMailer */
protected $campaignMailer;
/** @var IMailer */
protected $mailer;
public function __construct(
SmtpMailer $campaignMailer,
IMailer $mailer
) {
$this->campaignMailer = $campaignMailer;
$this->mailer = $mailer;
}
}
- Kamil Valenta
- Člen | 822
Udělal bych si něco jako config.cz.neon a config.sk.neon a v nich
definoval patřičné mailery.
V bootstrap.php pak natáhneš config dle domény.
Samotný mechanismus v app už by to řešit neměl, ten si prostě vyžádá
mailer a nějaký z DI dostane…
- David Matějka
- Moderator | 6445
Lepší bude udělat mailer factory, která bude závislá na http requestu a dle něj vytvoří správnou instanci maileru.
- Kamil Valenta
- Člen | 822
Je to možné, můžeš si natáhnout třeba 10 configů.
Jsou to dva různé přístupy, buď budeš mít nějaký obecný config, kde bude skoro vše – a k němu dílčí configy, které budeš načítat podle domény,
nebo
použiješ řešení od @DavidMatějka, kde budou oba mailery definované v jednom configu a nějaká factory vrátí ten správný podle http requestu.
Vyber si jeden ze způsobů a ten realizuj.