Předání parametru id do služby
- vanaveno
- Člen | 144
Ahojte potřeboval bych poradil
V prezenteru mám funkci na tvoření komentáře, který mi odešle email
public function commentFormSucceeded(Form $form, $values)
{
...
if(empty($comId)) {
$latte = new \Latte\Engine;
$params = [
'comId' => $comId,
'cislodokumentu' => $values->cislodokumentu,
'term' => $values->term,
'showLink' => $this->linkGenerator->link('Comment:show', array($comment->comId)),
];
$mail = new Message;
$mail->setFrom('+++Vytvoření připomínky <pripominka@email.cz>')
->addTo('email@gmail.com')
->setSubject('Byla vytvořena připomínka')
->setHtmlBody($latte->renderToString(__DIR__ . '/../templates/Comment/createcommentmail.latte', $params));
$mailer = new SendmailMailer;
$mailer->send($mail);
}
...
}
Tohle mi funguje a po vytvoření komentáře mi odešle email i s linkem ke komentáři. Ale chtěl jsem si to trochu zpřehlednit a tak jsem to tělo pro odesílání email vložil do modelu MailSender. Místo toho těla jsem v prezenteru vložil jen
$this->mailSender->createCommentMail($values, $comId);
Hodnoty $values se mi do těla přidávají. ale zaboha tam nemohu předat parametr $comId. Jak ho tam k nově vytvořenému komentáři dostanu? Mohli byste mi prosím někdo poradit?
Děkuje věčně vyprázdněná Vana
Editoval vanaveno (29. 5. 2019 18:45)
- vanaveno
- Člen | 144
MajklNajt napsal(a):
malo by tam byť namiesto
if(empty($comId)) {
toto
if(!empty($comId)) {
čiže teoreticky ani tá ukážka nemôže odoslať mail…¨
To jsem nepotřeboval vědět, to vím, já spíše potřebuji dostat parametr $comId z presenteru do toho modelu, když ještě není vytvořený komentář, ten $comId se předá do těla toho modelu MailSenderu.
Dík
- vanaveno
- Člen | 144
No když vytvařím komantář, tedy ještě není $comId v databázi, jak jej předat do modelu? Například $values tam dostanu vpohodě.
public function commentFormSucceeded(Form $form, $values)
{
$postId = $this->getParameter('id');
$comId = $this->getParameter('comId');
...
// Odesilani emailu
$this->mailSender->createCommentMail($values, $comId);
$this->flashMessage('Komentář uložen', 'success');
$this->redirect('Comment:show', $comment->comId);
v modelu mám tohle
function creatCommentMail($values, $comId)
{
$latte = new \Latte\Engine;
$params = [
'comId' => $comId,
'cislodokumentu' => $values->cislodokumentu,
'term' => $values->term,
'showLink' => $this->linkGenerator->link('Comment:show', array($comId)),
];
$mail = new Message;
$mail->setFrom('+++Vytvoření připomínky <pripominka@email.cz>')
->addTo('email@gmail.com')
->addTo('email@seznam.cz')
->setSubject('Byla vytvořena připomínka')
->setHtmlBody($latte->renderToString(__DIR__ . '/../templates/Comment/createcommentmail.latte', $params));
$mailer = new SendmailMailer;
$mailer->send($mail);
}
Editoval vanaveno (29. 5. 2019 20:30)
- havrank102
- Člen | 4
Poznat ho musíš, jak píše @MajklNajt ..
vyzkoušej:
bdump($this->getParameter('comId'));
Jak injectuješ mailSender?
/** className @inject */
- vanaveno
- Člen | 144
havrank102 napsal(a):
Poznat ho musíš, jak píše @MajklNajt ..
vyzkoušej:
bdump($this->getParameter('comId'));
Jak injectuješ mailSender?
/** className @inject */
V prezenteru mám
use App\Model\MailSender;
/**
* @var MailSender
* @inject
*/
public $mailSender;
Prostě se mi z presenteru nepředá $comId do modelu MailSenderu, takže linkgenerator mi vytvoří neplatný odkaz.Vše ostatní z values se mi předá, mail mi odešle.
- vanaveno
- Člen | 144
MajklNajt napsal(a):
tak potom čomu sa čuduješ??? keď ho nemáš v URL, nedostane sa ti do presenteru, ako sa ti môže dostať do modelu? najprv ulož záznam do DB, vráť si ID záznamu a to potom pošli do servisy, ktorá posiela maily…
Moje vyprázdněná vana tvoji otázku jestli je parametr v url nepochopila, samozřejmě po vytvoření komentu tam ten parametr je, problém je jinde a už jsem ho vyřešil.
Místo $this->mailSender->creatCommentMail($values, $comId);
jsem tam vložil
$this->mailSender->creatCommentMail($values, $comment->comId);
A už to funguje. Každopádně díky za pomoc.