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"?