2015-03-23 3 views
0

Есть ли способ иметь инструкции if в файле routes.php в Laravel 5? Я пробовал это, но не работает:Если условие в файле маршрута Laravel

Route::get('/', function() 
{ 
    if (Auth::user()) 
    Route::get('/', '[email protected]_in_index'); 
    else 
    Route::get('/', '[email protected]_index'); 
    endif 
}); 

Я бы предпочел, чтобы этот способ мог работать. Благодарю.

ответ

1

Вы должны использовать Route :: группы изначально вместо маршрута :: получить -

Route::group(['prefix' => '/'], function() 
{ 
    if (Auth::check()) // use Auth::check instead of Auth::user 
    { 
     Route::get('/', '[email protected]_in_index'); 
    } else{ 
     Route::get('/', '[email protected]_index'); 
    } 
}); 

Но что вы, вероятно, хотите сделать, это избавиться от состояния в файле маршрутов, и поместить его внутри общего индексного метода - индекс PagesController @. Особенно, если URL-адрес должен оставаться одинаковым между обоими маршрутами в любом случае.

public function index() 
{ 
    return Auth::check() 
     ? View::make('pages.logged-in-page') 
     : View::make('pages.not-logged-in-page'); 
} 

Конечно, это зависит от вас, как вы думаете, лучше.

+0

Hi. Спасибо за ваш ответ. Когда я использую ответ «Маршруты», я получаю эту ошибку: «Аргумент 1, переданный в Illuminate \ Routing \ Router :: group(), должен быть экземпляром массива, строка задана' – Sylar

+0

. Это сложная задача @damnkid. В настоящее время он по умолчанию используется для гостевого_индекса, хотя я вошел в систему. Я предполагаю, что маршруты не могут определить, кто-то вошел в систему. Предполагается, что он все еще гость. – Sylar

+0

Вы используете Auth :: user() или Auth :: check()? – Andy

0

вы должны использовать чек() вместо пользователя()

Он работает в Laravel 5. Я проверил это

Route::get('/', function(){ 
     if (Auth::check()) 
     { 
      Route::get('/', '[email protected]_in_index'); 
     } else { 
      Route::get('/', '[email protected]_index'); 
     } 
    }); 

другие вещи, которые вы сделали неправильно это синтаксис для если/в другом месте endif.

+0

Спасибо всем за постоянную поддержку, но это может быть ошибка в моей настройке, поскольку ничего не работает. Я объясню это, а затем обновить этот вопрос. – Sylar

+0

Я ищу решение той же проблемы. Auth :: check() не работает в маршрутизаторе для L5.1. Среднее ПО не работает ни при наличии одного и того же URL-адреса, а в разных контроллерах на основе входа. Любые другие решения? – martyn

0

Вы можете использовать этот

if (Auth::check()){ 
    Route::get('/', '[email protected]_in_index'); 
} 
else { 
    Route::get('/', '[email protected]_index'); 
} 

В Laravel 5.3. * Это работает. это работает для меня, поэтому я думаю, что это должно быть для вас.

Смежные вопросы