Předání parametru id do služby

vanaveno
Člen | 144
+
0
-

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)

MajklNajt
Člen | 471
+
0
-

malo by tam byť namiesto

if(empty($comId)) {

toto

if(!empty($comId)) {

čiže teoreticky ani tá ukážka nemôže odoslať mail…

vanaveno
Člen | 144
+
0
-

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

MajklNajt
Člen | 471
+
+1
-

tak skús dať kód bez chyby, ak v ňom máme hľadať chyby/riešenia… a čo kde kedy kam a ako chceš dostať z toho kódu vôbec nie je zrejmé…

vanaveno
Člen | 144
+
0
-

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)

MajklNajt
Člen | 471
+
0
-

a prečo by si ho tam nemohol dostať? však to ID poznáš už v momente $comId = $this->getParameter('comId');, tak čo má mail spoločný s databázou?

havrank102
Člen | 4
+
0
-

Poznat ho musíš, jak píše @MajklNajt ..

vyzkoušej:
bdump($this->getParameter('comId'));

Jak injectuješ mailSender?

/** className @inject */

vanaveno
Člen | 144
+
0
-

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.

MajklNajt
Člen | 471
+
0
-

Ten dump ti vypíše čo? Máš ten parameter vôbec v URL?

vanaveno
Člen | 144
+
0
-

MajklNajt napsal(a):

Ten dump ti vypíše čo? Máš ten parameter vôbec v URL?

Hází mi to null. Parametr v url nemám.

MajklNajt
Člen | 471
+
+1
-

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…

vanaveno
Člen | 144
+
0
-

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.