假设我的控制器中有一个函数可以检索看起来像这样的用户:
Route::get('passengers', 'Controller@index(1)')->name('passengers');
Route::get('attendees', 'Controller@index(2)')->name('attendees');
现在有办法让命名路由包含函数参数,如下所示:
{{1}}
这样他们都可以使用相同的功能
答案 0 :(得分:0)
如果命名路由定义了参数,则可以将参数作为第二个参数传递给路由功能。给定的参数将自动以正确的位置插入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' => 'Controller@show']);
答案 1 :(得分:0)
否则您无法将参数传递给操作名称,并且路由逻辑中存在问题:
Route::get('/{categoryName}', 'Controller@index')->name('index');
在控制器中,您将按名称获取类别:
public function index($categoryName) {
$category = Category::where('name', $categoryName)->first();
// use $ category as you please ;)
}
在刀片中:
route('index', ['categoryName' => $category->name])
答案 2 :(得分:0)
是的,您可以在网址中定义参数:
Route::get('passengers/{yourParam}', 'Controller@index')->name('passengers');
答案 3 :(得分:0)
Route::get( '{category}', [ 'as' => 'users', 'uses' => 'Controller@index' ]);
请记住在路线文件的末尾添加此路线,以免与任何其他路线发生碰撞。
现在在您的控制器中
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'])