2017-12-28 23 views
0

バンドル内のクラスのほとんどが同じ名前を持っています。 CRMFirstSecondExternalまたはCRMSecondThirdExternalなどがあります。今私は$変数にFirstSecondまたはSecondThirdを格納し、クラス名の間でその$変数を使用して、そのクラスへの適切な呼び出しを行う必要があります。名前の間に変数を使用してクラスを動的にします。

use Escalon\Bundle\Admin\CRMBundle\Helper\CRMTravelExpenseExternal; 
private function deletePreviousSchedule($params) 
{ 
    $queryParams = array(); 
    $em = $this->getDoctrine()->getManager(); 

    if($params['bundleAndTableName'] == 'EscalonAdminCRMBundle:ClientServiceTe') 
    { 
     $helper = 'TravelExpense'; 
    } 
    //$helper = preg_replace("/[^a-zA-Z]/", "", $helper); 
    $crmEntityObject = new CRM.$helper.External; 
    $crmEntityObject -> deletePreviousScheduleExternal($params); 
} 

エラー:致命的なエラー:不明なエラー:クラスのEscalon \バンドル\管理\ CRMBundle \コントローラ\ CRMは「中には見ら​​れない

答えて

1

問題は、そのクラス名が正しく連結されていないです。あなたがここにこれに関する詳細ドキュメントを見つけることができます

private function deletePreviousSchedule($params) 
{ 
    $queryParams = array(); 
    $em = $this->getDoctrine()->getManager(); 

    if($params['bundleAndTableName'] == 'EscalonAdminCRMBundle:ClientServiceTe') 
    { 
     $helper = 'Escalon\Bundle\Admin\CRMBundle\Helper\CRMTravelExpenseExternal'; 
    } 

    $crmEntityObject = new $helper(); 
    $crmEntityObject->deletePreviousScheduleExternal($params); 
} 

この機能を試してみてください - http://php.net/manual/en/language.namespaces.dynamic.php

また、それが解決のための

use Escalon\Bundle\Admin\CRMBundle\Helper\CRMTravelExpenseExternal; 
private function deletePreviousSchedule($params) 
{ 
    $queryParams = array(); 
    $em = $this->getDoctrine()->getManager(); 

    if($params['bundleAndTableName'] == 'EscalonAdminCRMBundle:ClientServiceTe') 
    { 
     $helper = 'TravelExpense'; 
    } 

    $className = "Escalon\Bundle\Admin\CRMBundle\Helper\CRM{$helper}External"; 
    $crmEntityObject = new $className(); 
    $crmEntityObject->deletePreviousScheduleExternal($params); 
} 
+0

こんにちは友人感謝を行うことが可能です。その働き。しかし、私の場合、条件に応じて他のクラスにもアクセスする必要があります。だから私は私が私の質問に記載されているようにクラス名の間に変数を連結することができますソリューションスローが必要です。 – Undefined

+0

条件に応じて異なるクラスにアクセスするための最初のソリューションを使用できない理由はわかりませんが、別のソリューションを追加しました。また、namespaceでクラスを指定するときに、最初の行に 'use Escalon \ Bundle \ Admin \ CRMBundle \ Helper \ CRMTravelExpenseExternal;'は必要ありません。 –

+0

私はあなたの助けに感謝します。 – Undefined

関連する問題