Laravel compact() и → с()
У меня есть часть кода, и я пытаюсь выяснить, почему один вариант работает, а другой нет.
return View::make('gameworlds.mygame', compact('fixtures'), compact('teams'))->with('selections', $selections);
Это позволяет мне генерировать представление массивов для светильников, команд и выборов, как ожидалось.
Однако
return View::make('gameworlds.mygame', compact('fixtures'), compact('teams'), compact('selections'));
не позволяет корректно сгенерировать представление. Я все еще могу отследить массивы, и я получаю ожидаемые результаты, но представление не отображается, когда оно прибывает в раздел выбора.
Это нормально, потому что я работаю с синтаксисом ->with()
, но просто нечетным.
Спасибо.
DS
Ответы
Ответ 1
Функция View::make
принимает аргументы 3, которые согласно документации:
public View make(string $view, array $data = array(), array $mergeData = array())
В вашем случае compact('selections')
- это 4-й аргумент. Это не переходит к представлению, и laravel вызывает исключение.
С другой стороны, вы можете использовать with()
столько раз, сколько хотите. Таким образом, это будет работать:
return View::make('gameworlds.mygame')
->with(compact('fixtures'))
->with(compact('teams'))
->with(compact('selections'));
Ответ 2
Я просто хотел прыгнуть сюда и исправить (предложить альтернативу) предыдущему ответу....
Фактически вы можете использовать компакт-диск таким же образом, однако, например, гораздо более аккуратный...
return View::make('gameworlds.mygame', compact(array('fixtures', 'teams', 'selections')));
Или, если вы используете PHP > 5.4
return View::make('gameworlds.mygame', compact(['fixtures', 'teams', 'selections']));
Это намного опережает и позволяет читать при просмотре того, что делает приложение;)
Ответ 3
Я смог использовать
return View::make('myviewfolder.myview', compact('view1','view2','view3'));
Я не знаю, если это потому, что я использую PHP 5.5, он отлично работает:)
Ответ 4
лучший способ для меня:
$data=[
'var1'=>'something',
'var2'=>'something',
'var3'=>'something',
];
return View::make('view',$data);
Ответ 5
Route::get('/', function () {
return view('greeting', ['name' => 'James']);
});
<html>
<body>
<h1>Hello, {{ $name }}</h1>
</body>
</html>
или
public function index($id)
{
$category = Category::find($id);
$topics = $category->getTopicPaginator();
$message = Message::find(1);
// here I would just use "->with([$category, $topics, $message])"
return View::make('category.index')->with(compact('category', 'topics', 'message'));
}
Ответ 6
Laravel Framework 5.6.26
вернуть более одного массива, тогда мы используем compact('array1', 'array2', 'array3',...)
чтобы вернуть представление.
viewblade
- это лезвие viewblade
интерфейса (view).
return view('viewblade', compact('view1','view2','view3','view4'));
Ответ 7
Ошибки "Class 'App\Http\Controllers\View' not found"?