【问题标题】:Symfony2 Service Container - Passing ordinary arguments to service constructorSymfony2 服务容器 - 将普通参数传递给服务构造函数
【发布时间】: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 服务构造函数时有问题。你能告诉我,如何将参数传递给服务构造函数吗?

【问题讨论】:

    标签: php symfony constructor dependency-injection pagination


    【解决方案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() 方法中传递参数会很棒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    相关资源
    最近更新 更多