Laravel Routes - 相同的路线,不同的控制器

时间:2016-06-03 15:53:46

标签: php laravel-5

我想在我的网络应用中添加一项功能,用户可以访问相同的网址,并根据他们是否登录获取不同的网页。我现在这样做的方法是使用中间件将登录用户重定向到/ 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"),无论用户是否登录。

2 个答案:

答案 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