2015-06-16 13 views
15

Sto lavorando a un'applicazione Web Laravel 5.0 con pannello di amministrazione. Ho riscontrato un problema con Routes. Ho raggruppato percorsi di amministrazione come di seguito,Laravel 5 Route Group e Basic (/) GET Route all'interno del gruppo

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'); 

    ........ 

}); 

Le cose funzionano bene. Posso utilizzare seguente senza alcun problema,

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

Ma voglio

http://domain.com/admin 

per visualizzare la pagina di login o reindirizzare a

http://domain.com/admin/login 

così ho cambiato il mio primo gruppo a seguire,

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]'); 
}); 

Ora Whe n accesso

http://domain.com/admin 

Ottengo "Questa pagina web ha un ciclo di reindirizzamento" in chrome. È possibile nel gruppo Rotta? se non come si fa con .htaccess?

UPDATE

riportano di seguito le modalità di un middleware user.adminhandle. Il che non fa altro che modificare il modello sottostante per l'autenticazione.

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

Questo è incredibile, lavora

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

non ho toccato predefinita .htaccess fornito da laravel 5.0, che è in basso,

<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 seguenti avere quasi 60-70 percorsi, a e tutti funzionano senza lo standard index.php nello scenario di cui sopra ho bisogno di index.php.

+0

Si prega di inviare il middleware – Szenis

+0

@ Szenis- Grazie. Ho aggiornato la mia risposta. –

+0

Puoi provare a dichiarare l'ultimo itinerario '/'? Mi chiedo in quale ordine i percorsi valutati. – Grasshopper

risposta

3

Si può avere che, senza alcun prefisso, è sufficiente aggiungere un percorso 'admin' che fa il reindirizzamento:

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

@ dynamic-thanks. Prima ho provato quasi la stessa cosa. Ho usato "return redirect (route ('admin.login'));" Non ha funzionato. Può essere perché route() è inutile nel file Routes. Proverò la tua soluzione. –

+0

@ dynamic- non ha funzionato. Ma grazie comunque. –

5

Il problema è che il middleware 'user.admin' è sempre in funzione, anche su '/ admin /accesso'. Quindi quando si accede a '/ admin' si viene reindirizzati a '/ admin/login' e quindi il middleware reindirizza nuovamente a '/ admin/login', e questo accade per sempre. Questo è il motivo per cui ottieni "Questa pagina web ha un ciclo di reindirizzamento".

Per funzionare, è necessario escludere "admin/login" dall'utilizzo del middleware "user.admin".

0

Il problema può essere causato da una cartella denominata admin nella directory pubblica.

Problemi correlati