2017-10-12 49 views
2

比方说,我在我的控制器中的功能,检索用户看起来像这样:传递函数变量中的路线声明

public function index($category) { 
// retrieve users depending on category or all 
} 

现在有没有一种方法,使命名路由,包括像这样的功能参数:

Route::get('passengers', '[email protected](1)')->name('passengers'); 
Route::get('attendees', '[email protected](2)')->name('attendees'); 

这样,他们都可以使用相同的功能

回答

0

不,你不能传递参数的操作名称,并且在你的路由逻辑问题:

Route::get('/{categoryName}', '[email protected]')->name('index'); 

并在控制器,你会例如,通过名字来取得的类别是这样的:

public function index($categoryName) { 
    $category = Category::where('name', $categoryName)->first(); 
    // use $ category as you please ;) 
} 

在刀片:

route('index', ['categoryName' => $category->name]) 
+0

@ M.Moes是,你有空吗? – Maraboc

+0

不是真的,我想要成为:example.com/passengers,example.com/attendees,并让它们进入索引(​​1)和索引(2)等。 –

+0

在控制器中创建两个方法如何? – Maraboc

0

如果指定的路线定义parame您可以将参数作为路由功能的第二个参数传递。给定参数将被自动插入到URL中的正确位置

https://laravel.com/docs/5.5/routing#named-routes

因此,使用route()助手这样的:

route('passengers', ['category' => 1]) 

然后你需要添加{category}的路线。此外,这里使用show()而不是index()真的更好。所以,你的路线将是这样的:

Route::get('passengers/{category}', ['as' => 'passengers', 'uses' => '[email protected]']); 
0
Route::get('{category}', [ 'as' => 'users', 'uses' => '[email protected]' ]); 

记住在你的路由文件的末尾,以不与碰撞,增加这条路线任何其他路线。

现在在你的控制器

use Illuminate\Http\Request; 
public function index(Request $request) 
{ 
    $category = $request->query('category'); 
    // $category will be passengers, attendees, etc 
} 

你的路线将是

/passengers can be accessed as route('users', ['category' => 'passengers']) 

/attendees can be accessed as `route('users', ['category' => 'attendees'])