2016-01-08 9 views
18

Provo la guida getting started da Laravel.com.Metodo non definito in Request :: all()

C'è un capitolo Creazione dell'attività. C'è $request un parametro del callback e nella funzione $request->all() viene utilizzato per ottenere i parametri GET. Ma se eseguo che callback ottengo l'errore

Fatal error: Call to undefined method Illuminate\Support\Facades\Request::all()

Ecco il mio codice:

Route::post('/task', function(Request $request) { 

    $validator = Validator::make($request->all(), [ 
     'name' => 'required|max:255', 
    ]); 

    if($validator->fails()) 
     redirect('/')->withInput()->withErrors($validator); 

    $task = new Task(); 
    $task->name = $request['name']; 
    $task->save(); 

    return redirect('/'); 
}); 
+0

include 'use Illuminate \ Http \ Request;' nella parte superiore del file –

risposta

42

La funzione di controllo viene iniettato un'istanza di Illuminate \ Support \ Facciate \ Richiesta che inoltra statica solo chiama l'oggetto sottostante.

Per risolvere il problema è necessario importare la classe di richiesta sottostante in modo che venga iniettata correttamente. Aggiungere il seguente nella parte superiore del vostro routes.php di file:

use Illuminate\Http\Request; 

o semplicemente chiamare richiesta :: tutti() invece di $ request-> tutti().

+3

Grazie, ma sarebbe bello se questa informazione fosse inserita in questa guida. – Gerrit

+0

@Gerrit Non c'è una spiegazione esplicita, ma esiste un 'use Illuminate \ Http \ Request;' nel file di rotte mostrato nella guida. – patricus

+0

@Jed grazie, la parte "OR" ha risolto il mio problema :) – Hazmat

3

Dal momento che questo codice si trova nel file routes.php, che non è namespace, l'oggetto Request viene iniettato nella vostra chiusura è il Request facciata, non l'oggetto Illuminate\Http\Request. La facciata Request non ha un metodo all().

modificare il codice per:

Route::post('/task', function(\Illuminate\Http\Request $request) { 
    // code 
}); 

Nota: in genere non rispettano pienamente l'oggetto Request nei metodi controller perché controllori di solito aggiungono un use Illuminate\Http\Request; in alto. Questo è il motivo per cui la definizione della funzione nel file di rotte può sembrare leggermente diversa dalla definizione di un metodo di controller.

È possibile controllare la risposta this per ulteriori informazioni.