【问题标题】:Laravel 5 route issue -> display data on viewLaravel 5 路线问题 -> 在视图中显示数据
【发布时间】:2017-01-26 14:24:28
【问题描述】:

我在 laravel 5 中有一个路由问题。我想制作一个系统,允许我使用变量创建路由。我已经搜索过了,但我找不到任何适合我的东西。 我想在 url 中放置一个变量,这样当我单击按钮时,它会在 url 中显示我: ... / $ range / $ sub-range / $ product_name 例如:.../美容/卫生/保湿霜。 谢谢你的帮助

更新 1

@JeffreyWesterkamp 是的,我做了这样的路线:Route::get('/{name}', 'RangeController@getRange')->name('range');,并在我的控制器中:

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

我在这种情况下使用了两个视图。 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 所以这很好。但我对 index.blade 上的 @foreach 有疑问,它显示所有范围的名称和描述。虽然我希望它在活动菜单上显示名称和描述,而不是所有范围。 layoutguest 上的@foreach 效果很好!
非常感谢您的帮助,我期待您的回音。

更新 2

如果我将$name 替换为$id。我在 layoutguest.blade 和 index.blade 中有我想要的。但网址显示“public/1”。 我去掉 index.blade 的@foreach 并添加`{{$aRange->name}}

我想知道如何在我的 url 和我的页面中包含范围的信息,例如 url "domaine/public/nameofgamme" 和 index.blade "name and description by range" 谢谢你的帮助

【问题讨论】:

  • 路由参数呢?您可以通过在路由定义中使用花括号将路由段定义为变量:/some-static-segment/{variable_1}/{variable_2}laravel.com/docs/5.3/routing#route-parameters
  • @JeffreyWesterkamp 你能帮帮我吗?我被这个问题困住了:/

标签: laravel-5 routes


【解决方案1】:

响应更新 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 记录,而不是全部。

为此,您还可以通过将视图参数作为数组传递来重新格式化您的 view() 调用,而不是为每个变量单独调用 with()

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

...由于变量名称与视图名称相同,因此使用 compact() 函数可以更短:

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

【讨论】:

    猜你喜欢
    • 2019-08-30
    • 1970-01-01
    • 2021-07-18
    • 2015-09-21
    • 2017-03-12
    • 2015-12-22
    • 1970-01-01
    • 2023-01-08
    • 2021-08-11
    相关资源
    最近更新 更多