2014-04-18 15 views
13

Attualmente sto provando a creare un'API RESTful con Laravel e attualmente sto creando un nuovo utente. Questo è solo un test e sto ottenendo dei risultati quando provo a convalidare la richiesta usando la validazione in Laravel; ecco il risultato:API REST in Laravel durante la convalida della richiesta

enter image description here

Ho cercato di creare uno nuovo da questo codice:

public function store() 
{ 

    $validation = Validator::make(Request::all(),[ 
     'username' => 'required|unique:users, username', 
     'password' => 'required', 
    ]); 

    if($validation->fails()){ 


    } else{ 
      $createUser = User::create([ 
       'username' => Request::get('username'), 
       'password' => Hash::make(Request::get('password')) 
      ]); 
    } 
} 

ma poi non so come restituire l'errore nella convalida. Ma continua a darmi quel codice HTML come mostrato nell'immagine quando stavo cercando di fare il se con validation->fails(). C'è un modo per ottenere la convalida in formato JSON?

risposta

17

Probabilmente dovresti restituire errori (che è un'istanza di Illuminate\Support\MessageBag) e codificarlo. Un'istanza MessageBag consente di convertirla direttamente nella sua rappresentazione JSON.

$errors = $validation->errors(); 

return $errors->toJson(); 

Ora non a toot il mio proprio corno ma ho recentemente sviluppato un pacchetto di API RESTful per laravel che fa tutto questo per voi e tutto quello che dovete fare è lanciare un semplice eccezione. Vedere il mio pacchetto dingo/api e il Wiki su returning errors. Fondamentalmente, invece di restituire gli errori si genererebbe un'eccezione.

throw new Dingo\Api\Exception\StoreResourceFailedException('Could not create a new user.', $validation->errors()); 

Sarebbe rappresentato dal seguente JSON.

{ 
    "message": "Could not create a new user.", 
    "errors": { 
     "username": ["The username is already in use."] 
    } 
} 
+0

mal provate il vostro pacchetto dopo aver fatto questo lavoro. il fatto è che restituisce if ($ validation-> fail()) {} in html nel mio terminale in modo da finire per restituire qualche html quindi non leggerà le righe successive di codici. che la mia teoria su cosa sta succedendo .. – Aoi

+0

fonte. devo specificare il tipo di contenuto. ho trovato la risposta qui http://stackoverflow.com/questions/7172784/how-to-post-json-data-with-curl-from-terminal-commandline-to-test-spring-rest – Aoi

+0

Dovresti suonare il corno . Dingo è un pacchetto molto popolare ora. Quindi grazie per averlo fatto! –

3

laravel fornisce fuori dalla scatola un metodo di convalida che è possibile chiamare dal proprio controller.

se si seleziona la classe astratta laravel Controller lo troverete utilizza un tratto chiamato ValidatesRequests

abstract class Controller extends BaseController 
{ 
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests; 
} 

in modo da poter utilizzare un metodo $this->validate(Request $request, array $rules); come si patto che il classe controller estende il controller

la la dichiarazione completa del metodo è

public function validate(Request $request, array $rules, array $messages = [], array $customAttributes = []) 
    { 
     $validator = $this->getValidationFactory()->make($request->all(), $rules, $messages, $customAttributes); 

     if ($validator->fails()) { 
      $this->formatValidationErrors($validator); 
     } 
    } 

Se il $ validator fallisce, il metodo genera un errore a seconda del tipo di richiesta, se è ajax (in questo caso è necessario includere nelle intestazioni di richiesta (Accept application/json) restituirà una risposta JSON contenente gli errori di convalida.

11

questi codici ti aiuteranno, lavorando per me.

$response = array('response' => '', 'success'=>false); 
$validator = Validator::make($request->all(), $rules); 
    if ($validator->fails()) { 
     $response['response'] = $validator->messages(); 
    }else{ 
//process the request 
} 
return $response; 
+0

Questa risposta merita più credito. Ho provato tutte le soluzioni e questo mi ha dato i messaggi giusti in 5.2 Laravel. –

+1

grazie a @GlennPlas – bhupendraosd

Problemi correlati