laravel 4根据条件重定向到控制器

时间:2013-12-17 10:05:28

标签: laravel laravel-4

可能很简单,但我完全迷失了

Route::get('/', function()
{
    if(Auth::check())
        // send traffic to \Controllers\Home@index
    else
        // send traffic to \Controllers\Loggedout\Home@index
});

我试过了:

  • Route::controller
  • URL::action
  • URL::route
  • Redirect::route

我还提到了两条路线:

  • Route::get('/', array('as'=>'loggedin', 'uses'=>'Controllers\Home@index'));
  • Route::get('/', array('as'=>'loggedout', 'uses'=>'Controllers\Loggedout\Home@index'));

但似乎没有任何效果。

我省略了创建控制器的实际代码,因为它非常标准,我知道它可以从Route::get('/', 'Controllers\Home@index')开始工作,并且可以正常返回。


4 个答案:

答案 0 :(得分:1)

我只是写了一个很长的答案,只是意识到我误解了你的问题。

据我所知,没有简单的方法来实现你在单一路线声明中所做的事情,相反,你会想要使用两个。

Route::group(array('before' => 'auth'), function() {
    Route::get('/', array('as' => '\Controllers\Home@index'));
}

Route::group(array('before' => 'guest'), function() {
    Route::get('/', array('as' => '\Controllers\Loggedout\Home@index'));
}

这里我们使用过滤器对各个呼叫进行分组,以便它们不会发生冲突。你不应该在路线中真正执行任何额外的逻辑,但如果你绝对必须,那么使用过滤器。

答案 1 :(得分:1)

这应该可以解决问题。首先,在您的路线中:

// app/routes.php
Route::get('/', 'Controllers\Home@index');

你的控制器:

// Controllers\Home class
class Home extends BaseController {

    public function __construct()
    {
        $this->beforeFilter('auth');
    }

    public function index()
    {

    }

}

最后,你的过滤器:

// app/filters.php
Route::filter('auth', function()
{
    if ( ! Auth::check()) {
        return Redirect::action('Controllers\Loggedout\Home@index');
    }
});

答案 2 :(得分:0)

尝试返回重定向

 Route::get('/', function()
    {
        if(Auth::check())
            return Redirect::route('loggedin');
        else
            return Redirect::route('loggedout');
    });

实际上,这可能最终会在重定向循环中结束,因为您总是返回/

您是否尝试根据某人的身份验证状态显示不同的页面?

答案 3 :(得分:0)

我的解决方案仅使用路线

Route::get('/', function()
{
    if (Auth::check())
        return Redirect::to('dashboard');
    else
        return View::make('index');

});