Большинство моих классов в группе имеют одно и то же имя. 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 \ Bundle \ Admin \ CRMBundle \ Controller \ 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);
}
Других решений пока нет …