可能很简单,但我完全迷失了
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')
开始工作,并且可以正常返回。
答案 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');
});