2016-11-15 4 views
-1

私のアプリでは、多様なバンドルが2つあります。BaseBundleUserBundleです。 私がUserBundleのコントローラの1つにいるとき、どのようにしてBaseBundleで利用可能な機能にアクセスできますか?Symfony2の別のバンドルの関数を呼び出す

私はUserBundle中だと私のような何かをしようとしている:

$property['x'] = $this->calculateNumber(array($propertyX->indexX, $propertyY->indexY)); 

これは私が取得エラーです:

Attempted to call method "calculateNumber" on class "Example\UserBundle\Controller\DefaultController". 
500 Internal Server Error - UndefinedMethodException 
+0

メソッドを静的にしますか? – DevDonkey

答えて

2

symfonyのnamespacesが便利になるところです。あなたがUserBundleにいるときに、ちょうどあなたが呼び出したいメソッドを含むクラスをインポートします。

# UserBundle/Controller/UserController.php 
use BaseBundle\Controller\DefaultController; 
//... 

class UserController extends Controller 
{ 
    /** 
    * @Route("/whatever", name="whatever") 
    */ 
    public function whatever() 
    { 
     $base = new DefaultController(); //instantiate the class containing the desired method 
     $property['x'] = $base->calculateNumber(array($propertyX->indexX, $propertyY->indexY)); //call the calculateNumber method 
    } 
} 
1

あなたはUserBundleでBaseBundleを拡張して提供する必要がありますcalculateNumberというパブリックメソッド。

BaseBundle例:

<?php 

namespace Example\BaseBundle; 

class BaseBundle 
{ 
    public function calculateNumber() 
    { 
     // ... 
    } 
} 

UserBundle例:

<?php 

namespace Example\UserBundle; 

use Example\BaseBundle; 

class UserBundle extends BaseBundle 
{ 
    // ... 
} 
1

あなたが見ることができるように、UserBundleが要求された機能が含まれていません。

そこを得るための2通りの方法があります。

1)BaseBundle \コントローラ\ DefaultControllerクラスを拡張してUserBundle \コントローラ\ DefaultControllerクラスを作成します。次に、親のすべての関数とプロパティーを含みます。

2)BaseBundle \ Controller \ DefaultControllerの実際のオブジェクトをnew()で作成し、それを使用して結果を取得します。

は両方のケースのために

use BaseBundle\Controller\DefaultController; 

を追加することを忘れないでください。

関連する問題