Laravel - Passer plus d'une variable à afficher
J'ai ce site et l'une de ses pages crée une simple liste de personnes à partir de la base de données. Je dois ajouter une personne spécifique à une variable à laquelle je peux accéder.
Comment modifier la ligne return $view->with('persons', $persons);
pour transmettre également la variable $ ms à la vue?
function view($view)
{
$ms = Person::where('name', 'Foo Bar');
$persons = Person::order_by('list_order', 'ASC')->get();
return $view->with('persons', $persons);
}
Il suffit de le passer comme un tableau:
$data = [
'name' => 'Raphael',
'age' => 22,
'email' => 'r.mobis@rmobis.com'
];
return View::make('user')->with($data);
Ou enchaînez-les, comme mentionné par @Antonio.
Voici comment vous le faites:
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);
}
Vous pouvez également utiliser 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'));
}
Ou faites-le en une seule ligne:
function view($view)
{
return $view
->with('ms', Person::where('name', '=', 'Foo Bar')->first())
->with('persons', Person::order_by('list_order', 'ASC')->get());
}
Ou même l'envoyer comme un tableau:
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]));
}
Mais, dans ce cas, vous devrez y accéder de la manière suivante:
{{ $data['ms'] }}
Utilisez compact
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'));
}
Passer plusieurs variables à une vue 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]);
Lisez ici à propos de Passing Data to Views in Laravel
Vous rencontrez un problème similaire, mais si vous ne voulez pas nécessairement renvoyer une vue avec un fichier, vous pouvez procéder comme suit:
return $view->with(compact('myVar1', 'myVar2', ..... , 'myLastVar'));
S'il vous plaît essayez ceci,
$ms = Person::where('name', 'Foo Bar')->first();
$persons = Person::order_by('list_order', 'ASC')->get();
return View::make('viewname')->with(compact('persons','ms'));
Cette réponse semble être
bit utile while déclarer le grand nombre de variable dans la fonction
Laravel 5.7. *
Par exemple
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 );
}
Quand vous voyez la dernière ligne du retour, ça n'a pas l'air bien
Quand votre projet grossit ce n'est pas bon
Alors
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));
}
Comme vous voyez toutes les variables déclarées comme étant un tableau de $viewShareVars
et accessibles dans la vue
Mais ma fonction devient très grande alors j'ai décidé de faire la ligne comme très simple
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));
}
la fonction php native get_defined_vars()
récupère toutes les variables définies à partir de la fonction
et array_keys
récupérera les noms de variables
donc à votre avis, vous pouvez accéder à toutes les variables déclarées à l'intérieur de la fonction
comme {{$todayPostActive}}
Pour transmettre plusieurs données de tableau du contrôleur à la visualisation, essayez-le. Ça fonctionne. Dans cet exemple, je passe les détails du sujet d'une table et les détails du sujet contiennent l'id de la catégorie, les détails tels que le nom si l'ID de la catégorie est extrait d'une autre catégorie de la table.
$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));