Ako predat v extension parameter pre factory create()?

před 5 lety

duskohu
Člen | 734
+
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');

před 5 lety

David Matějka
Moderator | 5764
+
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)

před 5 lety

Filip Procházka
Moderator | 4693
+
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);

před 5 lety

duskohu
Člen | 734
+
0
-

Super dakujem :-)