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?
}
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.
simplement revenir de controller:
return back()->withErrors('your error message');
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);
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]));
}