Создать объект класса из значения переменной в Laravel

Я хочу создать объект класса из возвращенной строки, но получаю ошибку Class **test_report** not found, Мой код:

public function display_report_builder($report_name = null)
{
$column_listing = new $report_name;// gets the test_report
return view('column_list')->with(['column_list_names' => $column_listing->columns]);
}

0

Решение

Это не лучший подход здесь. Что вы должны сделать, это использовать Шаблон фабричного дизайна:

class ReportFactory
{
public static function create($report_name)
{
switch($report_name) {
case 'test_report': return new TestReport();
default: throw new Exception('report not found');
}
}
}

Тогда вы звоните с $column_listing = ReportFactory::create($report_name);

Зачем? Потому что вы избегаете «магических переменных» с неизвестными данными; вы можете правильно отслеживать ошибки; вы можете использовать пространство имен; вы можете легко расширять функциональные возможности и легко активировать или деактивировать объекты (или отчеты в этом случае); у вас есть более чистый код и так далее …

0

Другие решения

проверить, является ли имя класса (строка) действительно допустимым классом:

public function display_report_builder($report_name = null)
{
$column_list_names = null;

if (class_exists($report_name) && is_a($report_name, App\reports\test_report::class, true)) {
$column_listing = new $report_name;
$column_list_names = $column_listing->columns;
}

return view('column_list', compact('column_list_names'));
}

это() : Проверяет, принадлежит ли данный объект этому классу или имеет этот класс
как один из его родителей.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector