Symfony2 服务容器 - 将普通参数传递给服务构造函数

Posted

技术标签:

【中文标题】Symfony2 服务容器 - 将普通参数传递给服务构造函数【英文标题】:Symfony2 Service Container - Passing ordinary arguments to service constructor 【发布时间】:2013-10-09 04:25:08 【问题描述】:

我有这个Paginator 类构造函数:

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\Paginator::__construct(),调用 /var/www/jobeet/app/cache/dev/appDevDebugProjectContainer.php上线 1306 并定义于 /var/www/jobeet/src/Ibw/JobeetBundle/Utils/Paginator.php 第 13 行

我猜在将参数传递给Paginator 服务构造函数时有问题。你能告诉我,如何将参数传递给服务构造函数吗?

【问题讨论】:

【参考方案1】:

好吧,为了回答您的问题,您可以使用 arguments 参数传递服务构造函数参数:

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);

【讨论】:

是的,我这样做只是为了让它工作,但是能够在 $this->get() 方法中传递参数会很棒。

以上是关于Symfony2 服务容器 - 将普通参数传递给服务构造函数的主要内容,如果未能解决你的问题,请参考以下文章

电容器插件不会将参数传递给java

将参数传递给 Docker 容器中的 Python argparse

将文件作为参数传递给 Docker 容器

Symfony2 覆盖 Sonata 媒体图像提供程序。(将接口传递给构造函数)

将命令行参数传递给 AWS Fargate 容器

在 Kubeflow 中运行自定义容器时,如何将参数传递给容器?