传递函数变量INSIDE路径声明

时间:2017-10-12 13:38:51

标签: laravel

假设我的控制器中有一个函数可以检索看起来像这样的用户:

Route::get('passengers', 'Controller@index(1)')->name('passengers');
Route::get('attendees', 'Controller@index(2)')->name('attendees');

现在有办法让命名路由包含函数参数,如下所示:

{{1}}

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

4 个答案:

答案 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');

View in docs

答案 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'])