Laravel将准确的参数传递给路线

时间:2016-11-22 12:45:50

标签: laravel routing localization

我已经翻译了我需要重定向到特定控制器功能的url,但我还需要传递一个确切的参数。

例如我想显示所有足球新闻,但在网址中我没有足球运动的ID(id = 1)所以我需要将参数id = 1传递给index()函数。 / p>

Route::get('/football-news/', ['as' => 'news.index', 'uses' => 'NewsController@index']);

通过“足球”不是一种选择。作为参数,因为它只是一个例子。翻译了真实路线,代码如下:

Route::get(LaravelLocalization::transRoute('routes.football.news'), ['as' => 'news.index', 'uses' => 'NewsController@index']);

2 个答案:

答案 0 :(得分:2)

假设您有一个NewsController来获取所有新闻,如

class NewsController extends Controller
{
 public function index()
 {
  $news = News::all(); //you have to create News model
  return view('news.index', compact('news')); //use to pass data in view
 }

public function show($id)
 {
    $news_detail=News::find($id); //to fetch detail of news from database

    return view('news.show', compact('news_detail'));
 }
}

在views / news文件夹中创建index.php和show.php。在index.php中

 @foreach($news as $news_item)
 <div>
  <a href="/news/{{$news_item->id}}">{{ $news_item->title }}</a>
 </div>
 @endforeach

这里使用“/ news / {{$ news_item-&gt; id}}”您可以将特定新闻的ID传递到路径文件中。 在show.php中

<h1>news</h1>
<h1>
{{ $news_detail->title }}
</h1>
<ul class="list-group">
@foreach($news_detail->detail as $details)
   <li class="list-group-item">{{$details}}</li>
@endforeach
</ul>
路径文件中的

Route::get('/news/{news}', 'NewsController@show');

现在你必须在NewsController.php中创建show($ id)函数,该参数是id。

答案 1 :(得分:0)

您可以使用?id=1参数附加索引网址(例如domain.com ?id = 1 ),并使用Request::get('id'); <在索引控制器操作中获取它/ p>

例如:

模板文件中的网址:

<a href="domain.com?id=1" />

在你的NewsController中:

public function index(Request $request){
    $id = $request->get('id');
}

即使您没有在路径文件中指定通配符,您也应该能够访问该参数。

编辑: 你将不得不为不同的路线调用不同的@action。您可以传入id通配符。 例如,在路径文件中:

Route::get('tennis-news/{id}', 'NewsController@tennisIndex');
Route::get('football-news/{id}', 'NewsController@footballIndex');

然后在NewsControllery中必须有公共方法tennisIndex($id)footballIindex($id),这些方法可以访问您在路径中设置的通配符。

例如,在NewsController中

public function tennisIndex($id){
    $tennnis_news = News::where('sport'='tennis)->where('id', $id)->get();
    return view('tennis_news', compact('tennnis_news'));
}