i have init() method in controller looks this:
class mycontroller extends globalcontroller { private function init() { $this->setvariables($first = false, $second = true); // comes globalcontroller $this->bill_repository = $this->setrepository('bill'); $this->var = .....; .... } ... } and globalcontroller this:
class globalcontroller extends basecontroller { //frequently used variables protected $user; protected $em; protected $expense_repository; protected function setvariables($first, $second) { $this->user = $this->container->get('security.context')->gettoken()->getuser(); if($first){ $this->em = $this->getdoctrine()->getentitymanager(); } if($second){ $this->expense_repository = $this->setrepository('expense'); } } } how improve using services? understanding after reading symfony's documentation should define both controllers servies , fo this:
<service id="my_controller" class="path/mycontroller" /> <service id="mycontroller_manager" class="path/globalcontroller"> <call method="setvariables"> <argument type="???" id="???" /> </call> </service> but i'm not quite sure , not quite sure how fill argument part or should use property injection? please me understand better , improve code :(
you going apply injection on concrete class (which inherits it's abstract class). cannot set defaults abstract implementations.
instead of applying multiple arguments ambiguous setarguments() method, might want implicitly have setters each dependency (to each own -- can refactor single method if want).
<service id="my_controller" class="path/mycontroller" <call method="setuser"> <argument type="service" id="security.context" /> </call> <call method="setdoctrine"> <argument type="service" id="doctrine.orm.entity_manager" /> </call> <call method="setrepositoryname"> <argument>expense<argument> </call> /> no more init method.
class mycontroller extends globalcontroller { } now need implement setters consume dependencies.
class globalcontroller extends basecontroller { /** properties */ public function setentitymanager(\doctrine\orm\entitymanager $entitymanager) { $this->entitymanager = $entitymanager; } public function setuser(\symfony\component\security\core\securitycontext $securitycontext) { $this->user = $securitycontext->gettoken()->getuser(); } public function setrepositoryname($repositoryname) { $this->repositoryname = $repositoryname; } }
Comments
Post a Comment