Laravel - Übergeben Sie mehr als eine Variable zum Anzeigen


73

Ich habe diese Seite und eine ihrer Seiten erstellt eine einfache Liste von Personen aus der Datenbank. Ich muss einer Variablen, auf die ich zugreifen kann, eine bestimmte Person hinzufügen.

Wie ändere ich die return $view->with('persons', $persons);Zeile, um auch die Variable $ ms an die Ansicht zu übergeben?

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

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

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

Antworten:


98

Übergeben Sie es einfach als Array:

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

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

Oder verkette sie, wie @Antonio erwähnt.


5
Weitaus eleganter als das Verketten 'mit'
S ..

3
Die empfohlene Methode ist die Verwendung einer kompakten Methode zum Übergeben von Variablen. Das fühlt sich etwas eleganter an.
Vaishnav Mhetre

Ich denke, ein Teil der Auswahl würde auf den Daten basieren. Für eine einfache Variable funktioniert dies jedoch mit verschachtelten Daten in einer Variablen compact oder mit am besten für die Bearbeitung in der Ansicht.
FabricioG

95

Das ist wie man es macht:

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

Sie können auch compact () verwenden :

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

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

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

Oder machen Sie es in einer Zeile:

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

Oder senden Sie es sogar als Array:

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]));
}

In diesem Fall müssten Sie jedoch folgendermaßen darauf zugreifen:

{{ $data['ms'] }}

Ja, ich bin in der Zwischenzeit so weit gekommen. Aber jetzt, wenn ich versuche, in der Ansicht darauf zuzugreifen, zB {{ $ms->name }}bekomme ich Undefined property: Laravel\Database\Eloquent\Query::$nameWas fehlt mir?
pjmil

Sie vermissen das ->first()in der ersten Zeile Ihrer Methode.
RMOBIS

1
pjmil116 wurde gerade bearbeitet, um den ->first()Raphael hinzuzufügen, über den kommentiert wurde.
Antonio Carlos Ribeiro

Ah ja, ich habe es verstanden. Ich habe gerade festgestellt, dass dieses Projekt Laravel 3 ist und somit eine große Quelle meiner Frustration ist. Musste die Abfragesyntax auf$ms = DB::first('select * from people where name = "Foo Bar"');
pjmil

1
Die Syntax von Laravel 4 und 3 ist für gängige Dinge wie diese ziemlich gleich. Sie können immer noch verwenden Person::where('name', '=', 'Foo Bar')->first(). Bearbeitet.
Antonio Carlos Ribeiro

30

Verwenden Sie kompakt

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

21

Übergeben mehrerer Variablen an eine Laravel-Ansicht

//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]);

Lesen Sie hier, wie Sie Daten an Ansichten in Laravel übergeben


4

Ist auf ein ähnliches Problem gestoßen, aber wenn Sie nicht unbedingt eine Ansicht mit Ansichtsdatei zurückgeben möchten, können Sie Folgendes tun:

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

3

Diese Antwort scheint zu sein

etwas hilfreich beim Deklarieren der großen Anzahl von Variablen in der Funktion

Laravel 5.7. *

Zum Beispiel

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

Wenn Sie die letzte Zeile der Retouren sehen, sieht sie nicht gut aus

Wenn Ihr Projekt größer wird, ist es nicht gut

Damit

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

Wie Sie sehen, werden alle Variablen als Array von deklariert $viewShareVarsund in der Ansicht aufgerufen

Aber meine Funktion wird sehr groß, deshalb habe ich beschlossen, die Linie so einfach wie möglich zu gestalten

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

Die native PHP-Funktion get_defined_vars() erhält alle definierten Variablen von der Funktion

und array_keys greift nach den Variablennamen

Aus Ihrer Sicht können Sie also auf alle deklarierten Variablen innerhalb der Funktion zugreifen

wie {{$todayPostActive}}


2

Bitte versuchen Sie dies,

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

1
    $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

Versuchen Sie es, um mehrere Array-Daten vom Controller an die Anzeige zu übergeben. Es funktioniert. In diesem Beispiel übergebe ich Betreffdetails aus einer Tabelle und Betreffdetails enthalten die Kategorie-ID. Die Details wie Name, wenn die Kategorie-ID aus einer anderen Tabellenkategorie abgerufen wird.

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

0

withFunktion und singleParameter:

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

withFunktion und arrayParameter:

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

-1

Es ist einfach :)

<link rel="icon" href="{{ asset('favicon.ico')}}" type="image/x-icon" />

Dieser scheint im Vergleich zu anderen Antworten etwas fehl am Platz zu sein.
s3c
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.