2017-12-28 3 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); 
} 

오류 : 치명적인 오류 : catch되지 않은 오류 :.에서 찾을 수 없습니다

답변

1

문제는 그 클래스의 이름이 올바르게 연결된되지이다 클래스 'Escalon \ 번들 \ 관리 \ CRMBundle \ 컨트롤러 \ CRM'. 당신이 여기에 대한 자세한 문서를 찾을 수있는이 기능

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

조건에 따라 다른 클래스에 액세스하는 첫 번째 솔루션을 사용할 수없는 이유는 확실치 않지만 다른 솔루션을 추가했습니다. 또한 네임 스페이스를 사용하여 클래스를 지정할 때 첫 줄에'use Escalon \ Bundle \ Admin \ CRMBundle \ Helper \ CRMTravelExpenseExternal; '이 필요 없습니다. –

+0

도와 주셔서 감사합니다. – Undefined

관련 문제