2013-10-02 14 views
8

Bu Paginator sınıfı yapıcısı vardır:Symfony2'nin Servisi Konteyner - Servis kurucusuna sıradan argümanları iletme

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

Paginator Servis böyle Ibw/JobeetBundle/Resources/config/services.yml kayıtlıdır i Paginator gibi

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

services: 
    ibw_jobeet_paginator: 
     class: %ibw_jobeet_paginator.class% 

kullanmak Bu:

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

Bu durum almak:

Uyarı: /var/www/jobeet/app/cache/dev/appDevDebugProjectContainer denilen :: __ construct IBW \ JobeetBundle \ utils \ paginator() için argüman 1 eksik. hat 1306 tarihinde php ve /var/www/jobeet/src/Ibw/JobeetBundle/Utils/Paginator.php hattı 13

Ben Paginator hizmet yapıcısına argümanlar geçerken sorun var sanırım tanımlanan. Söyler misiniz, nasıl bir hizmet yapıcı argüman geçmek? gerçekten çok parametreleri dinamik olduğu için size yardımcı olmuyor Tabii

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

:

cevap

22

Eh, sorunuzun cevabı, sen argümanlar parametresini kullanarak hizmet yapıcı argümanları geçmektedir. Bunun yerine

, başka yönteme yapıcı gelen argümanlar taşıyın:

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

Yea, I) (sadece çalışma, Ama olsun> $ this- 'içindeki argümanları iletme yeteneğine sahip almak için yaptım 'yöntem iyi olur. –