2015-06-16 5 views
15

Я работаю над веб-приложением Laravel 5.0 с панелью администратора. У меня проблема с маршрутами. Я группировал маршруты администратора, как показано ниже,Laravel 5 Route Group и Basic (/) GET Route in group

Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'middleware' => ['user.admin']], function() { 
    Route::get('login', [ 
     'as' => 'admin.login', 
     'uses' => '[email protected]' 
    ]); 
    Route::get('logout', [ 
     'as' => 'admin.login', 
     'uses' => '[email protected]' 
    ]); 
    Route::post('login', '[email protected]'); 
}); 

Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'middleware' => ['user.admin','auth', 'admin.acl']], function() { 

    Route::get('dashboard', [ 
     'as'   => 'admin.dashboard', 
     'uses'  => '[email protected]', 
     'permission' => 'admin_dashboard' 
    ]); 

    //Image Handler 
    Route::get('images/{size}/{name?}',[ 
     'as' => 'admin.images', 
     'uses' => '[email protected]' 
    ]); 

    Route::resource('user', 'UsersController'); 

    ........ 

}); 

Все работает нормально. Я могу использовать следующее без каких-либо проблем,

http://domain.com/admin/dashboard 
http://domain.com/admin/login 

Но я хочу

http://domain.com/admin 

, чтобы отобразить страницу входа или перенаправлять

http://domain.com/admin/login 

поэтому я изменил свою первую группу к следующей,

Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'middleware' => ['user.admin']], function() { 

    Route::get('/', [   
     'uses' => '[email protected]' 
    ]); 
    Route::get('login', [ 
     'as' => 'admin.login', 
     'uses' => '[email protected]' 
    ]); 
    Route::get('logout', [ 
     'as' => 'admin.login', 
     'uses' => '[email protected]' 
    ]); 
    Route::post('login', '[email protected]'); 
}); 

Now Whe n Я обращаюсь

http://domain.com/admin 

Я получаю «Эта веб-страница имеет петлю перенаправления» в хроме. Возможно ли это в группе маршрутов? если не так, как это сделать с .htaccess?

ОБНОВЛЕНИЕ

Ниже приведен метод handle из промежуточного user.admin. Что не делает ничего, кроме изменения базовой модели для аутентификации.

public function handle($request, Closure $next) 
    { 
     \Config::set('auth.table', 'admins'); 
     \Config::set('auth.model', 'App\DB\Admin\Admin'); 

     \Config::set('session.cookie', 'admin_session'); 
     \Config::set('session.path', '/admin/'); 

     return $next($request); 
    } 

UPDATE

Это удивительно, после работы

http://domain.com/index.php/admin 

Я не прикоснулся по умолчанию .htaccess поставляется Laravel 5.0, которая находится ниже,

<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 

    # Redirect Trailing Slashes... 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    # Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 
</IfModule> 

I имеют почти 60-70 маршрутов, и все они работают без index.php принять в этом сценарии мне нужно index.php.

+0

Пожалуйста, разместите свое промежуточное программное обеспечение – Szenis

+0

@ Szenis- Спасибо. Я обновил свой ответ. –

+0

Можете ли вы попытаться объявить маршрут '/' последним? Интересно, в каком порядке оцениваются маршруты. – Grasshopper

ответ

3

Вы можете иметь, что без префикса, просто добавить маршрут «администратора», который делает редирект:

// responds to http://domain.com/admin 
Route::get('admin', function(){ 
    if (//User not authenticated) 
    return redirect()->to('admin/login'); 
    else 
    //show admin; 
}); 
+0

@ динамический-спасибо. Раньше я пробовал почти то же самое. Я использовал «return redirect (route ('admin.login')); Это не работает. Может быть, потому, что route() бесполезен в файле маршрутов. Я попробую ваше решение. –

+0

@ динамик - не работает. Но все равно спасибо. –

5

Проблема заключается в том, что «user.admin» промежуточное программное обеспечение всегда работает, даже на «/ админ /авторизоваться'. Поэтому, когда вы получаете доступ к «/ admin», вы перенаправляетесь на «/ admin/login», а затем промежуточное программное обеспечение перенаправляет вас снова на «/ admin/login», и это происходит навсегда. Именно по этой причине вы получаете «Эта веб-страница имеет цикл перенаправления».

Для того, чтобы это сработало, вы должны исключить «admin/login» из своего промежуточного программного обеспечения «user.admin».

0

Проблема может быть вызвана папкой с именем admin в общедоступном каталоге.