次のようなコントローラーに init() メソッドがあります。
class MyController extends GlobalController
{
private function init()
{
$this->setVariables($first = false, $second = true); // this comes from GlobalController
$this->bill_repository = $this->setRepository('Bill');
$this->var = .....;
....
}
...
}
GlobalController は次のようになります。
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');
}
}
}
サービスを使用してこれを改善するにはどうすればよいですか? Symfony のドキュメントを読んだ後に得た理解は、この両方のコントローラーをサービスとして定義し、次のように定義する必要があるということです。
<service id="my_controller" class="path/MyController" />
<service id="mycontroller_manager" class="path/GlobalController">
<call method="setVariables">
<argument type="???" id="???" />
</call>
</service>
しかし、私はこれについてよくわからず、引数部分を埋める方法がよくわからないか、プロパティインジェクションを使用する必要がありますか? これをよりよく理解し、コードを改善するのを手伝ってください:(