2017-01-26 6 views
0

У меня проблема с маршрутом в laravel 5. Я хотел бы создать систему, которая позволит мне создавать маршруты с переменной. Я уже искал, но ничего не нашел для меня. Я хочу поместить переменную в URL-адрес, чтобы, когда я нажимаю на свою кнопку, он показывает мне в URL-адресе: .../$ range/$ sub-range/$ product_name Пример: .../beauty/hygiene/увлажняющий крем. Спасибо за вашу помощьLaravel 5 route issue -> отображение данных на вид

Update 1

@JeffreyWesterkamp Да, я сделал маршрут как то: Route::get('/{name}', '[email protected]')->name('range');, и в моем контроллере:

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

У меня есть в этом случае используется два вида. layoutguest.blade.php и index.blade.php в папке (guest/range /). На мой взгляд layoutguest, я сделал это:

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

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

         </li> 
         @endforeach 

А на стороне index.blade.php. Я сделал

@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 

На данный момент, когда я нажимаю на меню (диапазон) в layoutguest. Он отображается в URL: domaine/public/nameofrange Так что это хорошо. но у меня проблема с @foreach на index.blade, она отображает имя и описание всех диапазонов. Хотя я бы хотел, чтобы он отображал имя и описание в активном меню, не все диапазоны. @foreach на мастереguest работа хорошо!
Большое спасибо за вашу помощь, и я с нетерпением жду вашего ответа.

Update 2

Если я заменяю $name по $id. У меня есть то, что я хочу в layoutguest.blade и index.blade. Но url отображает 'public/1'. Снимаю @foreach в index.blade и добавить `{{$ aRange-> имя}}

Я хочу знать, как у меня в URL и в моей странице информации о диапазоне, как в URL и на index.blade «название и описание, диапазон» «Доменный/государственный/nameofgamme» Спасибо вам за вашу помощь

+0

как о параметрах маршрута? Вы можете определить сегменты маршрута как переменные, используя фигурные скобки в определении маршрута: '/ some-static-segment/{variable_1}/{variable_2}'. https://laravel.com/docs/5.3/routing#route-parameters –

+0

@JeffreyWesterkamp вы можете мне помочь? Я застрял в этой проблеме: / –

ответ

0

в ответ на обновление 2

в вашей controller вы $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); 
} 

Метод find однако всегда ищет по первичный индекс.мы могли бы изменить эту строку, чтобы позволить нам получить запись диапазона, где имя соответствует значению вашей переменной следующим образом:

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

В сущности, это говорит базы данных: Посмотрите все записи where имя является $name , и когда вы закончите поиск, дайте мне запись first, а не все.

Только ради этого, вы можете также переформатировать вид() вызов, передавая свои параметры просмотра в виде массива, вместо отдельного with() вызова для каждой переменной:

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

... и потому что имена переменных такие же, как имена для вашей точки зрения, это может быть еще короче с compact() функции:

return view('guest/range/index', compact(
    'aRange', 
    'ranges', 
    'name' 
]);