Laravel 路由组参数

Cal*_*lum 1 php laravel

我希望应用程序使用如下 URL 结构:

  1. /account/johnsmith/photos
  2. /account/johnsmith/messages
  3. /account/johnsmith/settings
  4. /account/joebloggs/photos

因此,用户可以添加多个帐户,然后路由组会自动选择帐户。

Route::group(['middleware' => 'auth', 'prefix' => 'account/{username}'], function () {
  Route::get('/photos', 'PhotosController@index')->name('photos.index');
});
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我可以{username}访问PhotosController@index.

有没有办法编写一些中间件来自动获取帐户信息并且组中的所有子路由都可以访问它?或者这是尝试构建这个的糟糕方法吗?

Joe*_*Joe 5

这应该可以通过路由模型绑定来实现。

Route::bind('username', function ($username) {
    return Account::findByUsername($username);
});
Run Code Online (Sandbox Code Playgroud)

注意:上面的代码可以放在您的路由提供商中或路由组本身中。

完成后,您将模型Account作为第一个参数传递到控制器方法中,它将自动成为与该用户名匹配的模型。如果不存在,则返回 404。

// If {username} is 'bob', the Account object now references Bob's account.
public function index(Account $account) {}
Run Code Online (Sandbox Code Playgroud)

请在此处查看 Laravel 文档