2017-01-26 5 views
0

Ich habe ein Routenproblem in Laravel 5. Ich möchte ein System erstellen, das mir erlaubt, Routen mit einer Variablen zu erstellen. Ich habe schon gesucht, aber ich finde nichts, was bei mir funktioniert. Ich möchte eine Variable in die URL setzen, so dass wenn ich auf meine Schaltfläche klicke zeigt es mir in der URL: .../$ range/$ sub-range/$ product_name Beispiel: .../beauty/hygiene/Feuchtigkeitscreme. Vielen Dank für Ihre HilfeLaravel 5 Routenproblem -> Anzeige der Daten in der Ansicht

Update 1

@JeffreyWesterkamp Ja, ich machte die Strecke wie diese: Route::get('/{name}', '[email protected]')->name('range');, und in meinem Controller:

public function getRange($name) 
 
    { 
 
\t $ranges=Range::all(); 
 
\t $aRange=Range::find($name); 
 
\t return view('guest/range/index')->with('aRange', $aRange)->with('ranges',$ranges)->with('name',$name); 
 
    }

Ich habe In diesen Fällen werden zwei Ansichten verwendet. layoutguest.blade.php und index.blade.php in einem Ordner (guest/range /). Aus meiner Sicht layoutguest, machte ich dies:

@foreach ($ranges as $range) 
         <li> 

          <a href="{{route('range',$range->name)}}">{{$range->name}}</a> 

         </li> 
         @endforeach 

Und auf der Seite des index.blade.php. Ich habe

@foreach ($ranges as $gamme) 
@extends('layoutguest') 
@section('content') 

@foreach ($ranges as $gamme) 
<section ...> 
<div ....> 
<h4>{{$range->name}}</h4> 

    <p> 
     {{$range->description}} 
    </p> 
</div> 
....... 
</section> 
@endforeach 
@endsection 

Für jetzt, wenn ich auf das Menü (Bereich) in LayoutGuest klicken. Es wird in der URL angezeigt: Domaine/public/nameofrange Also das ist gut. aber ich habe ein Problem mit @foreach auf index.blade, Es zeigt den Namen und die Beschreibung aller Bereiche. Während ich möchte, dass der Name und die Beschreibung im aktiven Menü angezeigt werden, nicht alle Bereiche. Die @foreach auf Layout-Gast arbeiten gut!
Vielen Dank im Voraus für Ihre Unterstützung, und ich freue mich von Ihnen zu hören.

aktualisieren 2

Wenn ich ersetzen $name durch $id. Ich habe was ich will in layoutguest.blade und index.blade. Aber die URL zeigt 'public/1' an. Ich nehme die @foreach des index.blade aus und fügen Sie `{{$ aRange-> name}}

Ich möchte wissen, wie in meiner URL und in meine Seite des Bereichs der Informationen haben, wie in url "domaine/public/nameofgamme" und auf der index.blade "Namen und eine Beschreibung von Bereich" Vielen Dank für Ihre Hilfe

+0

Wie wäre es mit Routenparametern? Sie können Routensegmente als Variable definieren, indem Sie in Ihrer Routendefinition geschweifte Klammern verwenden: '/ some-static-segment/{variable_1}/{variable_2}'. https://laravel.com/docs/5.3/routing#route-parameters –

+0

@ JeffreyWesterkamp können Sie mir bitte helfen? Ich stecke mit diesem Problem fest: –

Antwort

0

Als Reaktion auf Update 2

In Ihrem controller Sie tun $aRange = Range::find($name):

public function getRange($name) 
{ 
    $ranges = Range::all(); 
    $aRange = Range::find($name); 
    return view('guest/range/index')->with('aRange', $aRange)->with('ranges',$ranges)->with('name',$name); 
} 

Die Methode find sucht jedoch immer nach Primärindex.konnten wir diese Linie uns zu ermöglichen, ändern Sie den Bereich Datensatz wo der Name entspricht Ihrer Variablenwert abzurufen, wie folgt:

public function getRange($name) 
{ 
    $ranges = Range::all(); 
    // Use where() here to search by anything else than primary index 
    $aRange = Range::where('name', $name)->first(); 

    return view('guest/range/index')->with('aRange', $aRange)->with('ranges',$ranges)->with('name',$name); 
} 

Dies sagt im Wesentlichen Ihre Datenbank: Geben Sie für alle Datensätze where der Name ist $name Und wenn du mit der Suche fertig bist, gib mir die first Aufzeichnung, anstatt alle.

nur um von ihm, man könnte auch Ihre Ansicht() -Aufruf umformatieren von Ihrer Ansicht Parameter als Array übergeben, anstelle eines separaten with() Aufruf für jede Variable:

return view('guest/range/index', [ 
    'aRange' => $aRange, 
    'ranges' => $ranges, 
    'name' => $name 
]); 

... und Da die Variablennamen mit den Namen für Ihre Ansicht identisch sind, kann dies mit der compact()-Funktion sogar noch kürzer sein:

Verwandte Themen