Ako na Mail Message Factory (najlepsie automaticky)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
matopeto
Člen | 395
+
0
-

Je v nette nieco ako Mail Message Factory, ktora by mi vratila nakonfigurovanu \Nette\Mail\Message?

V dokumentacii (https://doc.nette.org/cs/configuring#…) je nieco ako:

factories:
    nette.mail:
        setup:
            - addHeader('X-Mailer', 'Nette Framework 2.1')

Co v nette 2.1 nefunguje. a konfiguracia nette.mail je depricated.

Viem, ze si mozem napisat vlastnu tovaren, ktora bude tieto sluzby vytvarat.
Napr. takto:

<?php
class MessageFactory
{
	protected $from = NULL;

	protected $returnPath = NULL;

	public function __construct($from = NULL, $returnPath = NULL)
	{
		$this->from = $from;
		$this->returnPath = $returnPath;
	}

	/**
	 * @return \Nette\Mail\Message
	 */
	public function create()
	{
		$message = new \Nette\Mail\Message();
		if ($this->from != NULL)
			$message->setFrom($this->from);

		if ($this->returnPath != NULL)
			$message->setReturnPath($this->returnPath);

		return $message;
	}
}
?>

Ide to ale nejako napisat jednoduchsie pomocou generovanych tovarniciek, pripadne interface?

David Matějka
Moderator | 6445
+
0
-

pokud si udelas interface pro generovanou tovarnicku

interface MessageFactory
{
	/**
	* @return \Nette\Mail\Message
	**/
	public function create();
}

a registrujes ji spolu se setup metodama, tak ty setup metody se budou aplikovat na vytvorenou instanci Message

services:
	-
		implement: MessageFactory
		setup:
			- setFrom()
			- addTo()
			...
matopeto
Člen | 395
+
0
-

Diki, presne tak som to pred chvilou nakoniec urobil. :)

matopeto
Člen | 395
+
0
-

Rozmyslam, preco je nutne pisat ten interface? To by mohlo generovat automaticky nette. Nerobilo to niekedy, ked este existovali „factories:“ tam clovek nemusel pisat mimo konfigu prakticky nic…

David Matějka
Moderator | 6445
+
0
-

to byla ta stara cesta, kde si byl zavisli na kontejneru, pomociktereho sis to vytvarel

$container->createMailMessage()

neslo pomoci DI predat pouze tovarnu. takhle si vyzadas IMessageFactory a nette za tebe udela implementaci