2013-10-02 17 views
8

Tôi có constructor này Paginator lớp:Symfony2 Dịch vụ container - Đi qua lập luận thông thường để xây dựng dịch vụ

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

Dịch vụ Paginator được đăng ký tại Ibw/JobeetBundle/Resources/config/services.yml như thế này:

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

services: 
    ibw_jobeet_paginator: 
     class: %ibw_jobeet_paginator.class% 

Khi tôi sử dụng Paginator như này:

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

tôi nhận được ngoại lệ này:

Cảnh báo: Thiếu đối số 1 cho Ibw \ JobeetBundle \ Utils \ Paginator :: __ construct(), được gọi là trong /var/www/jobeet/app/cache/dev/appDevDebugProjectContainer. php on line 1306 và quy định tại /var/www/jobeet/src/Ibw/JobeetBundle/Utils/Paginator.php dòng 13

tôi đoán có điều gì đó sai trong truyền đối số cho các nhà xây dựng Paginator dịch vụ. Bạn có thể cho tôi biết, Làm thế nào để vượt qua các đối số cho một nhà xây dựng dịch vụ?

Trả lời

22

Vâng, để trả lời câu hỏi của bạn, bạn vượt qua đối số nhà xây dựng dịch vụ bằng cách sử dụng tham số đối số:

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

Dĩ nhiên điều đó không thực sự giúp bạn ra ngoài nhiều vì các thông số động.

Thay vào đó, di chuyển các đối số từ các nhà xây dựng phương pháp khác:

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, tôi đã làm điều đó chỉ để làm cho nó làm việc, Nhưng có khả năng vượt qua các đối số bên trong '$ this-> get() 'phương pháp sẽ là tuyệt vời. –

Các vấn đề liên quan