Laravel - передать более одной переменной для просмотра

У меня есть этот сайт, и одна из его страниц создает простой список людей из базы данных. Мне нужно добавить одного конкретного человека в переменную, к которой я могу получить доступ.

Как мне изменить return $view->with('persons', $persons); также передать переменную $ms в представление?

    function view($view)
    {
        $ms = Person::where('name', 'Foo Bar');

        $persons = Person::order_by('list_order', 'ASC')->get();

        return $view->with('persons', $persons);
    }

12 ответов

Решение

Просто передайте это как массив:

$data = [
    'name'  => 'Raphael',
    'age'   => 22,
    'email' => 'r.mobis@rmobis.com'
];

return View::make('user')->with($data);

Или связать их, как упомянуто @Antonio.

Вот как вы это делаете:

function view($view)
{
    $ms = Person::where('name', '=', 'Foo Bar')->first();

    $persons = Person::order_by('list_order', 'ASC')->get();

    return $view->with('persons', $persons)->with('ms', $ms);
}

Вы также можете использовать compact ():

function view($view)
{
    $ms = Person::where('name', '=', 'Foo Bar')->first();

    $persons = Person::order_by('list_order', 'ASC')->get();

    return $view->with(compact('persons', 'ms'));
}

Или сделать это в одну строку:

function view($view)
{
    return $view
            ->with('ms', Person::where('name', '=', 'Foo Bar')->first())
            ->with('persons', Person::order_by('list_order', 'ASC')->get());
}

Или даже отправить его в виде массива:

function view($view)
{
    $ms = Person::where('name', '=', 'Foo Bar')->first();

    $persons = Person::order_by('list_order', 'ASC')->get();

    return $view->with('data', ['ms' => $ms, 'persons' => $persons]));
}

Но в этом случае вам нужно будет получить к ним доступ следующим образом:

{{ $data['ms'] }}

Используйте компактный

function view($view)
{
    $ms = Person::where('name', '=', 'Foo Bar')->first();

    $persons = Person::order_by('list_order', 'ASC')->get();
    return View::make('users', compact('ms','persons'));
}

Передача нескольких переменных в представление Laravel

//Passing variable to view using compact method    
$var1=value1;
$var2=value2;
$var3=value3;
return view('viewName', compact('var1','var2','var3'));

//Passing variable to view using with Method
return view('viewName')->with(['var1'=>value1,'var2'=>value2,'var3'=>'value3']);

//Passing variable to view using Associative Array
return view('viewName', ['var1'=>value1,'var2'=>value2,'var3'=>value3]);

Читайте здесь о передаче данных в представления в Laravel

Этот ответ, кажется,

немного полезно при объявлении большого числа переменных в функции

Ларавел 5.7.*

Например

public function index()
{
    $activePost = Post::where('status','=','active')->get()->count();

    $inActivePost = Post::where('status','=','inactive')->get()->count();

    $yesterdayPostActive = Post::whereDate('created_at', Carbon::now()->addDay(-1))->get()->count();

    $todayPostActive = Post::whereDate('created_at', Carbon::now()->addDay(0))->get()->count();

    return view('dashboard.index')->with('activePost',$activePost)->with('inActivePost',$inActivePost )->with('yesterdayPostActive',$yesterdayPostActive )->with('todayPostActive',$todayPostActive );
}

Когда вы видите последнюю строку возвратов, она выглядит не очень хорошо

Когда ваш проект становится больше, это не хорошо

Так

public function index()
    {
        $activePost = Post::where('status','=','active')->get()->count();

        $inActivePost = Post::where('status','=','inactive')->get()->count();

        $yesterdayPostActive = Post::whereDate('created_at', Carbon::now()->addDay(-1))->get()->count();

        $todayPostActive = Post::whereDate('created_at', Carbon::now()->addDay(0))->get()->count();

        $viewShareVars = ['activePost','inActivePost','yesterdayPostActive','todayPostActive'];

        return view('dashboard.index',compact($viewShareVars));
    }

Как видите, все переменные объявлены как массив $viewShareVars и доступны в представлении

Но моя функция становится очень большой, поэтому я решил сделать линию очень простой

public function index()
    {
        $activePost = Post::where('status','=','active')->get()->count();

        $inActivePost = Post::where('status','=','inactive')->get()->count();

        $yesterdayPostActive = Post::whereDate('created_at', Carbon::now()->addDay(-1))->get()->count();

        $todayPostActive = Post::whereDate('created_at', Carbon::now()->addDay(0))->get()->count();

        $viewShareVars = array_keys(get_defined_vars());

        return view('dashboard.index',compact($viewShareVars));
    }

нативная функция php get_defined_vars() получить все определенные переменные из функции

а также array_keys будет захватывать имена переменных

так что, по вашему мнению, вы можете получить доступ ко всем объявленным переменным внутри функции

как {{$todayPostActive}}

with функция и single параметры:

    $ms = Person::where('name', 'Foo Bar');
    $persons = Person::order_by('list_order', 'ASC')->get();
    return $view->with(compact('ms', 'persons'));

with функция и array параметр:

    $ms = Person::where('name', 'Foo Bar');
    $persons = Person::order_by('list_order', 'ASC')->get();
    $array = ['ms' => $ms, 'persons' => $persons];
    return $view->with($array);

Сталкивался с подобной проблемой, но если вы не хотите возвращать представление с файлом представления, вы можете сделать это:

return $view->with(compact('myVar1', 'myVar2', ..... , 'myLastVar'));

Пожалуйста, попробуйте это,

$ms = Person::where('name', 'Foo Bar');
$persons = Person::order_by('list_order', 'ASC')->get();
return View::make('viewname')->with(compact('persons','ms'));
    $oblast = Oblast::all();
    $category = Category::where('slug', $catName)->first();
    $availableProjects = $category->availableProjects;
    return view('pages.business-area')->with(array('category'=>$category, 'availableProjects'=>$availableProjects, 'oblast'=>$oblast));

Для передачи нескольких массивов данных из контроллера для просмотра, попробуйте. Это работает. В этом примере я передаю сведения о субъекте из таблицы, а сведения о субъекте содержат идентификатор категории, такие как имя, если идентификатор категории извлекается из другой категории таблицы.

$category = Category::all();
$category = Category::pluck('name', 'id');
$item = Subject::find($id);
return View::make('subject.edit')->with(array('item'=>$item, 'category'=>$category));

Это просто:)

<link rel="icon" href="{{ asset('favicon.ico')}}" type="image/x-icon" />
Другие вопросы по тегам