2013-10-02 112 views
8

我有这个Paginator类的构造函数:Symfony2的服务容器 - 传递普通参数服务构造

class Paginator 
{  
    public function __construct($total_count, $per_page, $current_page) 
    { 
    } 
} 

Paginator服务注册在Ibw/JobeetBundle/Resources/config/services.yml这样的:

parameters: 
    ibw_jobeet_paginator.class: Ibw\JobeetBundle\Utils\Paginator 

services: 
    ibw_jobeet_paginator: 
     class: %ibw_jobeet_paginator.class% 

当我使用Paginator像这个:

$em = $this->getDoctrine()->getManager(); 

$total_jobs = $em->getRepository('IbwJobeetBundle:Job')->getJobsCount($id); 
$per_page = $this->container->getParameter('max_jobs_on_category'); 
$current_page = $page; 

$paginator = $this->get('ibw_jobeet_paginator')->call($total_jobs, $per_page, $current_page); 

我得到这个异常:

警告:缺少参数1 IBW \ JobeetBundle \ utils的\分页程序:: __结构(),称为 在/ var/WWW/Jobeet的/应用/缓存的/ dev/appDevDebugProjectContainer。 PHP的在线 1306和 /var/www/jobeet/src/Ibw/JobeetBundle/Utils/Paginator.php线13

我想有一些错误传递参数给Paginator服务构造函数定义。你能告诉我,如何将参数传递给服务构造函数?

回答

22

好了,回答你的问题,你通过使用参数参数服务构造函数的参数:

services: 
    ibw_jobeet_paginator: 
     class: %ibw_jobeet_paginator.class% 
    arguments: 
     - 1 # total 
     - 2 # per page 
     - 3 # current page 

当然,这并不真正帮助你很多,因为这些参数都是动态。

相反,从构造移动参数的另一种方法:

class Paginator 
{  
    public function __construct() {} 

    public function init($total_count, $per_page, $current_page) 
    { 
    } 
} 

$paginator = $this->get('ibw_jobeet_paginator')->init($total_jobs, $per_page, $current_page); 
+11

是啊,我这样做,只是为了得到它的工作,但有来传递参数里面'$这个 - >获得的能力() '方法会很好。 –