5

I would like to have general home page and a different homepage for logged-in users
I search a lot on google but I can't find what to put in my if statement

I tried something like this:

Route::get('/', array('as'=>'home', function(){
    if (!Auth::check()) {
        Route::get('/', array('uses'=>'homecontroller@index'));
    }
    else{
        Route::get('/', array('uses'=>'usercontroller@home'));
    }
}));

I also try with something like:

return Controller::call('homecontroller@index');

but it seems it's not for laravel 4

I tried a lot of other things so I think it's more a misconception problem

If you have any clue

thanks for your help

jeremy castelli
  • 1,232
  • 10
  • 26

4 Answers4

9

ok after discussions on this platform and other forums, I come back with a compact solution

Route::get('/', array('as'=>'home', 'uses'=> (Auth::check()) ? "usercontroller@home" : "homecontroller@index" ));
jeremy castelli
  • 1,232
  • 10
  • 26
6

The most simple solution I can think of is:

<?php

$uses = 'HomeController@index';
if( ! Auth::check())
{
    $uses = 'HomeController@home';
}

Route::get('/', array(
     'as'=>'home'
    ,'uses'=> $uses
));

Or you can just route the url / to method index() and do the Auth::check() in there.

Rob Gordijn
  • 6,381
  • 1
  • 22
  • 29
3
// routes.php
Route::get('/', 'homecontroller@index');



// homecontroller.php
class homecontroller extends BaseController
{
    public function index()
    {
        if (!Auth:: check()) {
            return $this->indexForGuestUser();
        } else {
            return $this->indexForLoggedUser();
        }
    }

    private function indexForLoggedUser()
    {
        // do whatever you want
    }

    private function indexForGuestUser()
    {
        // do whatever you want
    }

}
Andreyco
  • 22,476
  • 5
  • 61
  • 65
  • 1
    thanks andreyco but this is not what I'm looking for. As you can see in my exemple I would like to route to an other controller so I prefer to do the test in the route file – jeremy castelli Sep 19 '13 at 12:19
0

You should try something like:

Route::get('/', array('as'=>'home', function(){
    if (!Auth::check()) {
        Redirect::to('home/index'));
    }
    else{
        Redirect::to('user/index'));
    }
}));

So you are basically redirecting the user based on the Auth check instead of defining an additional route.

Or use route filters

Route::filter('authenticate', function()
{
    if (!Auth::check())
    {
        return Redirect::to('home/index');
    }
});

Route::get('home', array('before' => 'authenticate', function()
{
    Redirect::to('user/index');
}));

http://laravel.com/docs/routing#route-filters

Glad To Help
  • 5,299
  • 4
  • 38
  • 56