我正在尝试通过网址传递用户名。
site.tld/{username}/account
所以我在路线中有这个条目
Route::group(array('prefix' => '{username}'), function($username)
{
$user = User::whereUsername($username)->first();
if(!is_null($user))
{
Route::get('portfolio', 'PortfolioController@getIndex');
Route::get('profile', 'ProfileController@getIndex');
....
}
}
我收到以下错误。
Object of class Illuminate\Routing\Router could not be converted to string
我做错了什么?
答案 0 :(得分:1)
Route::group()
与Route :: method()的工作方式不同,闭包是在路由列表过程中执行的,传递给它的是路由器,而不是你的参数:
Route::group(array('prefix' => '{username}'), function($router) { ... });
所以你基本上在做:
$user = User::whereUsername($router)->first();
这就是它说
的原因Object of class Illuminate\Routing\Router could not be converted to string
但您可以使用过滤器:
Route::filter('age', function($route, $request)
{
if (! User::whereUsername($route->parameter('username'))->first())
{
App::abort(404);
}
});
Route::group(array('prefix' => '{username}', 'before' => 'age'), function($username)
{
Route::get('portfolio', 'PortfolioController@getIndex');
Route::get('profile', 'ProfileController@getIndex');
});