Ako predat v extension parameter pre factory create()?

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

Caute predstavte si klasicky navrh:

class BlockControl extends Control
{
	private $slug;

	private $httpRequest;

	public function __construct($slug, IRequest $httpRequest)
	{
		parent::__construct();
		$this->slug = $slug;
		$this->httpRequest = $httpRequest;
	}

}


interface IBlockControl
{

	/**
	 * @param string $slug
	 * @return BlockControl
	 */
	public function create($slug);
}

v neone:

factories:
	blockControl:
		create: BlockControl(%slug%)
		implement: IBlockControl
		parameters: [slug]

v presentri si injectnem a v create component pouzijem:

$blockControl->create('my-slug');

ale ako mam predavat parameter $slug ked blockControl vytvaram v extension:

$builder->addDefinition($this->prefix('blockControl'))
	->setImplement('IBlockControl')
	->setFactory('BlockControl');
David Matějka
Moderator | 6445
+
0
-
$builder->addDefinition($this->prefix('blockControl'))
    ->setImplement('IBlockControl')
    ->setFactory('BlockControl')
    ->setParameters(array('slug'))
    ->setArguments(array(new \Nette\PhpGenerator\PhpLiteral('$slug'))
    ->setAutowired(TRUE);

Editoval matej21 (13. 1. 2014 23:15)

Filip Procházka
Moderator | 4668
+
0
-

Parametry továrničky se umisťují pomocí %

$builder->addDefinition($this->prefix('blockControl'))
    ->setImplement('IBlockControl')
    ->setFactory('BlockControl')
    ->setParameters(array('slug'))
    ->setArguments(array('%slug%'))
    ->setAutowired(TRUE);
duskohu
Člen | 778
+
0
-

Super dakujem :-)