2015-03-27 10 views
16

Cercando di giocare con Laravel oggi per la prima volta. Sto ottenendo il seguente errore quando si tenta di visitare localhost/progetto/pubblico:Percorso [login] non definito

InvalidArgumentException
percorso [login] non definito.

app/routes.php:

<?php 

Route::get('/', '[email protected]'); 
Route::get('login', '[email protected]'); 
Route::post('login', '[email protected]'); 
Route::get('dashboard', '[email protected]'); 

app/controllers/HomeController.php:

<?php 

class HomeController extends Controller { 

    public function redirect() 
    { 
     if (Auth::check()) 
      return Redirect::route('dashboard'); 

     return Redirect::route('login'); 
    } 

} 

app/controller/LoginContoller.php:

<?php 

class LoginController extends Controller { 

    public function show() 
    { 
     if (Auth::check()) 
      return Redirect::route('dashboard'); 

     return View::make('login'); 
    } 

    public function do() 
    { 
     // do login 
    } 

} 

app /controllers/DashboardController.php:

<?php 

class DashboardController extends Controller { 

    public function show() 
    { 
     if (Auth::guest()) 
      return Redirect::route('login'); 

     return View::make('dashboard'); 
    } 

} 

Perché viene visualizzato questo errore?

risposta

38

Stai cercando di reindirizzare a un named route il cui nome è login, ma non hai percorsi con quel nome:

Route::post('login', [ 'as' => 'login', 'uses' => '[email protected]']); 

La 'as' porzione del secondo parametro definisce il nome del percorso. Il primo parametro stringa definisce la route .

7

Laravel ha introdotto Named Routes in Laravel 4.2.

COSA SONO LE VIE NOME?

Named Routes consente di fornire nomi al percorso del router. Quindi usando il nome possiamo chiamare i percorsi nel file richiesto.


COME CREARE percorsi denominati?

percorsi denominati creati in due modi diversi: come e nome()

METODO 1:

Route::get('about',array('as'=>'about-as',function() 
    { 
      return view('about'); 
    } 
)); 

METODO 2:

Route::get('about',function() 
{ 
return view('about'); 
})->name('about-as'); 

Come utilizziamo le viste?

<a href="{{ URL::route("about-as") }}">about-as</a> 

Quindi laravel 'middleware' => 'auth' ha già predefinito per il rinvio come pagina di login se l'utente non ha ancora registrato in.Hence dovremmo usare come parola chiave

Route::get('login',array('as'=>'login',function(){ 
    return view('login'); 
})); 
15

In app \ eccezioni \ Handler.php

protected function unauthenticated($request, AuthenticationException $exception) 
{ 
    if ($request->expectsJson()) { 
     return response()->json(['error' => 'Unauthenticated.'], 401); 
    } 

    return redirect()->guest(route('auth.login')); 
} 
+3

sì, ma è un peccato che laravel hadcoded questo percorso ((non è ovvio per i neofiti – yuklia

+1

Grazie tanto per questo. – Galironfydar

+0

Questa è la risposta, che sono alla ricerca di tanti giorni –

1

provare questo metodo:

look per questo file

"RedirectifAuthenticated.php"

aggiornare i seguenti si preferisce

if (Auth::guard($guard)->check()) { 
    return redirect('/'); 
} 

$ guardia come arg prenderà in nome di la guardia personalizzata che hai impostato ad es. "admin" allora dovrebbe essere così.

if (Auth::guard('admin')->check()) { 
    return redirect('/admin/dashboard'); 
}else{ 
    return redirect('/admin/login'); 
} 
1

mi sono imbattuto in questo errore di recente dopo utilizzando l'autenticazione integrata di laravel di routing utilizzando php artisan make:auth. Quando si esegue questo comando, queste nuove rotte vengono aggiunte al file web.php:

Auth::routes(); 

Route::get('/home', '[email protected]')->name('home'); 

devo avere accidentalmente cancellati questi percorsi. L'esecuzione di php artisan make:auth ha ripristinato nuovamente i percorsi e risolto il problema. Sto usando Laravel 5.5.28.

0

Sostituire nelle viste (file Blade) tutti

{{percorso ('/')}} ----- da ----> {{url ('/') }}

0

In caso di API o, diciamo, durante l'implementazione di JWT. Il middleware JWT lancia questa eccezione quando non riesce a trovare il token e proverà a reindirizzare alla rotta di accesso. Poiché non è stato trovato alcun collegamento nella route specificata, questa eccezione viene generata. È possibile modificare il percorso in "app \ Exceptions \ Handler.php"

utilizzare Illuminate \ Auth \ AuthenticationException;

protected function unauthenticated($request, AuthenticationException $exception){ 
     return $request->expectsJson() 
      ? response()->json(['message' => $exception->getMessage()], 401) 
      : redirect()->guest(route('ROUTENAME')); 
}