Ответ 1
Просто передайте это как массив:
$data = [
'name' => 'Raphael',
'age' => 22,
'email' => '[email protected]'
];
return View::make('user')->with($data);
Или связать их, как упомянуто @Antonio.
У меня есть этот сайт, и одна из его страниц создает простой список людей из базы данных. Мне нужно добавить одного конкретного человека к переменной, к которой я могу получить доступ.
Как мне изменить строку 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);
}
Просто передайте это как массив:
$data = [
'name' => 'Raphael',
'age' => 22,
'email' => '[email protected]'
];
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
Похоже на аналогичную проблему, но если вы не хотите возвращать представление с файлом вида, вы можете сделать это:
return $view->with(compact('myVar1', 'myVar2', ..... , 'myLastVar'));
Пожалуйста, попробуйте это,
$ms = Person::where('name', 'Foo Bar')->first();
$persons = Person::order_by('list_order', 'ASC')->get();
return View::make('viewname')->with(compact('persons','ms'));
Этот ответ кажется
немного полезно при объявлении большого числа переменной в функции
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}}
Для передачи нескольких данных массива из контроллера для просмотра попробуйте. Это работает. В этом примере я передаю подробные данные из таблицы, а подробные сведения о предмете содержат идентификатор категории, такие данные, как имя, если идентификатор категории извлекается из другой категории таблицы.
$category = Category::all();
$category = Category::pluck('name', 'id');
$item = Subject::find($id);
return View::make('subject.edit')->with(array('item'=>$item, 'category'=>$category));
$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));
Это просто :)
<link rel="icon" href="{{ asset('favicon.ico')}}" type="image/x-icon" />