我想在我的网络应用中添加一项功能,用户可以访问相同的网址,并根据他们是否登录获取不同的网页。我现在这样做的方法是使用中间件将登录用户重定向到/ home。但是,我想做像facebook这样的事情。
当有人输入http://facebook.com时,会分析该人是否已登录,如果是,则显示他们的住所,如果不是,则会在同一网址上显示注册页面(您可以看到栏中的地址不会改变)
我试图在我的路线上使用此代码:
Route::get('/', array('as'=>'home', 'uses'=> (Auth::check()) ? "usercontroller@home" : "homecontroller@index" ));
在此处找到:https://stackoverflow.com/a/18896113/2724978
但它只显示第二个控制器方法(" homecontroller @ index"),无论用户是否登录。
答案 0 :(得分:1)
只是我或你不能像@AJReading所建议的那样,并使用普通的控制器方法来处理这个问题吗?
设置如下:
在HomeController.php
:
class HomeController extends Controller
{
/**
* Show a different view depending on whether or not the user is logged-in.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
if (Auth::check()) {
// logged-in
return view('home.index.authorised')->with('user', Auth::user());
} else {
// not logged-in
return view('home.index.guest');
}
}
}
然后创建备用视图,例如resources/views/home/guest.blade.php
答案 1 :(得分:1)
这正是你想要的:
Route::get('/', function() {
$guest = Auth::guest();
if($guest)
{
$controller = $this->app->make('App\Http\Controllers\TaskController');
return $controller->callAction('guest', $parameters = array());
}
else
{
$controller = $this->app->make('App\Http\Controllers\TaskController');
return $controller->callAction('user', $parameters = array());
}
});
只需用你的名字替换名字即可。 测试:Laravel Framework版本5.1.35(LTS)。
应该通过查看命名空间来进一步改进。 是否提出了使用中间件的更好的解决方案 - 但没有保存它并且现在无法重新创建它。
来自/基于以下内容的答案: Laravel single route point to different controller depending on slugs http://laravel.io/forum/10-16-2014-l5-controller-does-not-exist