Laravel 5 Groupe de routes et Basic ( / ) get Route within group
je travaille sur une application web Laravel 5.0 avec un panneau D'administration. Je suis confronté à un problème avec les Routes. J'ai regroupé les Routes Admin comme ci-dessous,
Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'middleware' => ['user.admin']], function () {
Route::get('login', [
'as' => 'admin.login',
'uses' => 'AuthController@getLogin'
]);
Route::get('logout', [
'as' => 'admin.login',
'uses' => 'AuthController@getLogout'
]);
Route::post('login', 'AuthController@postLogin');
});
Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'middleware' => ['user.admin','auth', 'admin.acl']], function () {
Route::get('dashboard', [
'as' => 'admin.dashboard',
'uses' => 'DashboardController@index',
'permission' => 'admin_dashboard'
]);
//Image Handler
Route::get('images/{size}/{name?}',[
'as' => 'admin.images',
'uses' => 'ImagesController@images'
]);
Route::resource('user', 'UsersController');
........
});
les choses fonctionnent bien. Je peux l'utiliser sans aucun problème,
http://domain.com/admin/dashboard
http://domain.com/admin/login
Mais je veux
http://domain.com/admin
pour afficher la page de connexion ou rediriger vers
http://domain.com/admin/login
alors j'ai changé mon premier groupe en suivant,
Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'middleware' => ['user.admin']], function () {
Route::get('/', [
'uses' => 'AuthController@getLogin'
]);
Route::get('login', [
'as' => 'admin.login',
'uses' => 'AuthController@getLogin'
]);
Route::get('logout', [
'as' => 'admin.login',
'uses' => 'AuthController@getLogout'
]);
Route::post('login', 'AuthController@postLogin');
});
maintenant quand j'accède
http://domain.com/admin
je vois 'cette page Web a une boucle de redirection' dans chrome. Est-ce possible en groupe de Route? si non comment faire avec .htaccess?
UPDATE
ci-Dessous handle
méthode d'un Middleware user.admin
. Ce qui ne fait que changer le modèle sous-jacent d'authentification.
public function handle($request, Closure $next)
{
Config::set('auth.table', 'admins');
Config::set('auth.model', 'AppDBAdminAdmin');
Config::set('session.cookie', 'admin_session');
Config::set('session.path', '/admin/');
return $next($request);
}
UPDATE
C'est incroyable, suite à des travaux
http://domain.com/index.php/admin
je n'ai pas touché par défaut .htaccess
fourni par laravel 5.0, qui est ci-dessous,
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ / [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
j'ai presque 60-70 itinéraires, et tous travaillent sans index.php
accepter dans le scénario ci-dessus, j'avais besoin index.php
.
3 réponses
Le problème est que 'l'utilisateur.admin' middleware est toujours en cours d'exécution, même sur '/admin/login'. Ainsi, lorsque vous accédez à '/admin', Vous êtes redirigé vers '/admin/login', puis le middleware vous redirige vers '/admin/login', et cela se produit pour toujours. C'est la raison pour laquelle vous obtenez 'cette page Web a une boucle de redirection'.
pour que cela fonctionne, vous devez exclure ' admin / login 'de l'utilisation de votre' user.admin ' middleware.
Vous pouvez avoir cela sans préfixe, ajoutez simplement une route 'admin' qui fait la redirection:
// responds to http://domain.com/admin
Route::get('admin', function(){
if (//User not authenticated)
return redirect()->to('admin/login');
else
//show admin;
});
Le problème peut être causé par un dossier nommé admin
dans l'annuaire public.