Ako nastavit config a vyhnut sa Factory

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

Zdravim,
nikde som cital ze je lepsie nepouzivat factories, uz teraz aj viem preco narobilo mi to problemy

mam triedu autopilot kt. ma metodu addTask(), metoda by mala vracat instanciu \Service\Task\TaskSerivce lenze problem je v tom ze, config vyzera takto:

services:
	model: @doctrine.entityManagers.default
	autopilot:
		class: Service\Autopilot\Autopilot

factories:
	taskService:
		parameters: [entity]
		class: Service\Task\TaskSerivce(@model, %entity%)

otazka je: ako v metode addTask() ziskam instanciu na tu Service\Task\TaskSerivce, kedze v nej nemam context cize neviem zavolant tu factory taskService

neviem ci som sa vyjadril pochopitelne, snad ano…

Editoval achtan (10. 10. 2012 15:47)

Filip Procházka
Moderator | 4668
+
0
-

Nejsem si jistý o co se snažíš, ale ty továrničky zoufale vřískají „pomóc! chce mě znásilnit!“

services:
    model: @doctrine.entityManagers.default
    autopilot: Service\Autopilot\Autopilot
    taskService: Service\Task\TaskSerivce(@model)

Plynule pokračuj na doporučené čtení

Editoval HosipLan (10. 10. 2012 16:33)

David Ďurika
Člen | 328
+
0
-

ide o to ze tie service sme navrhli tak ze servica nemoze existovat bez entity a kazda entita ma vlastnu instanciu servici… v tom to cele viazne…

ale ako tak pozeram ten clanok tak to je asi riesenie, ze sa do autopilota preda factory na taskService

services:
    model: @doctrine.entityManagers.default
    autopilot: Service\Autopilot\Autopilot(@taskServiceFactory)
    taskServiceFactory: ServiceFactory(@model, '\Service\Task\TaskService')

Editoval achtan (10. 10. 2012 16:47)

Filip Procházka
Moderator | 4668
+
0
-

achtan napsal(a):

ide o to ze tie service sme navrhli tak ze servica nemoze existovat bez entity a kazda entita ma vlastnu instanciu servici… v tom to cele viazne…

Důležité je, že teď už víte, jak to nedělat :)

David Ďurika
Člen | 328
+
0
-

Riesenie

services:
    model: @doctrine.entityManagers.default
    autopilot: Service\Autopilot\Autopilot(@taskServiceFactory)
    taskServiceFactory: Extras\Service\ServiceFactory(@model, 'Service\Task\TaskService')
<?php
namespace Extras\Models\Service;

class ServiceFactory extends \Nette\Object {

	public $model;
	public $serviceName;

	public function __construct(\Doctrine\ORM\EntityManager $model, $serviceName) {
		$this->model = $model;
		$this->serviceName = $serviceName;
	}

	public function create($entity) {
		$serviceName = $this->serviceName;
		return new $serviceName($this->model, $entity);
	}
}
?>