web-dev-qa-db-fra.com

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);
    }
57
pjmil

Il suffit de le passer comme un tableau:

$data = [
    'name'  => 'Raphael',
    'age'   => 22,
    'email' => '[email protected]'
];

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

Ou enchaînez-les, comme mentionné par @Antonio.

81
rmobis

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'] }}
71

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'));
}
27
sumit

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

18
Akshay Khale

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'));
3
Makan

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'));
1
Pillai

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}}

0
Manojkiran.A

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));
0
Deepak Kumar
    $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));
0
Dragana Poznan