Comment retourner ou lancer une erreur de validation/exception dans Laravel?

avoir une méthode qui importe des données CSV dans une base de données. Je fais un peu de base de validation à l'aide de

class CsvImportController extends Controller
{
    public function import(Request $request)
    {   
        $this->validate($request, [
            'csv_file' => 'required|mimes:csv,txt',
        ]);

mais après cela, les choses peuvent mal tourner pour des raisons plus complexes, plus loin dans le terrier du lapin, qui jette des exceptions d'une sorte. Je ne peux pas écrire des trucs de validation à utiliser avec le validate méthode ici, mais, J'aime vraiment comment Laravel fonctionne lorsque la validation échoue et comment il est facile d'intégrer l'erreur(s) dans la vue de lame, etc, donc...

Est-il (nettoyer de préférence)manuellement dites à Laravel que "je sais que je n'ai pas utilisé votre validate Méthode maintenant, mais je voudrais vraiment que vous exposiez cette erreur ici comme si je l'avais fait"? Est-il quelque chose que je peux revenir, une exception je peux envelopper les choses, ou quelque chose?

try
{
    // Call the rabbit hole of an import method
}
catch(Exception $e)
{
    // Can I return/throw something that to Laravel looks 
    // like a validation error and acts accordingly here?
}
17
demandé sur Svish 2017-11-10 12:30:13

4 réponses

à partir de laravel 5.5, le ValidationException classe possède une méthode statique withMessages que vous pouvez utiliser:

$error = \Illuminate\Validation\ValidationException::withMessages([
   'field_name_1' => ['Validation Message #1'],
   'field_name_2' => ['Validation Message #2'],
]);
throw $error;

je n'ai pas testé, mais ça devrait fonctionner.

42
répondu Erin 2018-04-20 10:18:56

simplement revenir de controller:

return back()->withErrors('your error message');
2
répondu Mantas D 2018-02-05 09:51:49

Laravel < = 5.6 cette solution a fonctionné pour moi:

$validator = Validator::make([], []); // Empty data and rules fields
$validator->errors()->add('fieldName', 'This is the error message');
throw new ValidationException($validator);
2
répondu Mārtiņš Briedis 2018-08-01 07:10:00

vous pouvez essayer un message personnalisé sac

try
{
    // Call the rabbit hole of an import method
}
catch(\Exception $e)
{
    return redirect()->to('dashboard')->withErrors(new \Illuminate\Support\MessageBag(['catch_exception'=>$e]));
}
1
répondu madalinivascu 2017-11-10 09:38:05