Laravel - 过滤到控制器

时间:2013-11-16 22:02:18

标签: php laravel

我正在尝试使用过滤器来检查用户是否是访客...如果是这样,请使用控制器中的方法....如果我正确行事,请告诉我...我一直在错误call_user_func_array() expects parameter 1 to be a valid callback, no array or string given

所以路线:

Route::get('/', ['before' => 'checkUserFilter'], function()
{
    return View::make('home');
});

过滤器:

Route::filter('checkUserFilter', function() 
{
    if (Auth::guest()) 
    {
        Route::get('/', 'User@createUser');
    }

});

控制器

public function createUser($username)
{

    $username = 'test-'.str_random(4);
    $newUser = new User;
    if ($username == null) {
        $newUser->username = 'user-'.str_random(4);
    } else  {
        $newUser->username = $username;
    }

    $newUser->password = str_random(8); // ignore this line.....
    $newUser->save();

    Auth::login($newUser); 
}

1 个答案:

答案 0 :(得分:2)

您必须重定向,在这种情况下,您可以使用action(),并且还需要在过滤器之外为该操作创建路线,因此,这可能是您的代码:

Route::filter('checkUserFilter', function() 
{
    if (Auth::guest()) 
    {
        return Redirect::action('User@createUser');
    }

});

Route::get('/createUser', 'User@createUser');

修改

为什么你需要创建/createUser路线?

因为Redirect基本上会查找指向该操作的路由并重定向到与路由相关的URI。因此,重定向会将您的浏览器发送到http://app.com/createUser

如果您不创建此路线,重定向将引发NotFoundHttpException