2013-10-02 16 views
8

に普通の引数を渡す:Symfony2のサービスコンテナ - 私はこの<code>Paginator</code>クラスのコンストラクタを持っているサービスのコンストラクタ

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

私はこの例外を取得:

警告: は/ var/www /のJobeetの/アプリ/キャッシュは/ dev/appDevDebugProjectContainerで呼び出さ:: __構造 IBW \ JobeetBundle \ Utilsの\ページネータ()、の引数1がありません。ライン 1306上でPHPと /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

いやを、私はちょうどそれが働いて、しかし、 'ます$ this->取得()内の引数を渡す機能を持つ取得することにしました'メソッドは素晴らしいでしょう。 –

関連する問題