Laravel 4前缀变量路由

时间:2014-03-25 22:58:27

标签: php laravel-4

我正在尝试通过网址传递用户名。

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

我做错了什么?

1 个答案:

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