Мне нужно создать функцию в контроллере, чтобы показать конкретное представление с именем файла, определяемым базой данных. - Ларавел - PullRequest
0 голосов
/ 27 октября 2019

У меня есть система, где есть страница по умолчанию и 4 модели, эти модели можно изменить, имя файла, соответствующего модели, находится в базе данных, вот когда начались мои проблемы, потому что я не могу поставить переменнуюэто определяет имя файла в return view (), хотя переменная находится в той же функции, я знаю, что проблема не в переменной, она возвращает ожидаемое значение, но laravel не распознает его так, как я пытаюсь.

контроллер

public function searchByName($name)
{
    $company = Company::where('name', $name)->firstOrFail();
    $personality = DB::table('personalities')->where('name', $name)->first();
    $home_cp = DB::table('personalities')->select('index_company')->where('name', $name)->first();  
    $index_company = view('company.base.$home_cp');
    return view('company.base.index', compact('company', 'name', 'personality', 'index_company'));
}

просмотр

@if(isset($personality))
     {{$index_company}}
@else
        @include('company.base.default')
@endif;

erro

InvalidArgumentException
View [company.base.$home_cp] not found.

проблема здесь в том, что он говорит, что страница не была найдена, потому что файл '$ home_cp' не существует, то есть он не рассматривает '$ home_cp' как переменную, поэтому он не возвращает то, что мне нужно в этомcase имя файла.

Обратите внимание, что проблема в контроллере, а не в предварительном просмотре. Если вы перейдете к предварительному просмотру и ничего не найдете, он покажет вам файл по умолчанию.

Каков наилучший способ решить эту проблему или какой правильный способ сделать это (если есть)?

1 Ответ

0 голосов
/ 27 октября 2019

Используйте double кавычки для анализа переменной вместо одинарных кавычек

$index_company = view('company.base.$home_cp');

Должно быть

$index_company = view("company.base.$home_cp");
...