2017-09-24 4 views
1

Je suis en train de mettre en œuvre l'une des nouvelles fonctionnalités de Laravel « Règles de validation personnalisées » et je suis en cours d'exécution dans l'erreur suivante:Laravel Validation personnalisée - API Mailgun

Object of class Illuminate\Validation\Validator could not be converted to string 

que je suis les étapes de cette video: New in Laravel 5.5: Project: Custom validation rule classes (10/14)

Il s'agit d'un outil de validation de l'API Mailgun API.

forme simple qui demande: prénom, nom, société, e-mail et un message

Voici mon code:

web.php

Route::post('contact', '[email protected]'); 

StaticPageController.php

use Validator; 
use App\Http\Validation\ValidEmail as ValidEmail; 

public function postContact(Request $request) { 
     return Validator::make($request->all(), [ 
      'firstname' => 'required|max:90', 
      'lastname' => 'required|max:120', 
      'company' => 'max:120', 
      'email' => [ 
       'required', 'string', 'max:255', 
       new ValidEmail(new \GuzzleHttp\Client) 
      ], 
      'message' => 'required', 
     ]); 
} 

ValidEmail.php

<?php 

namespace App\Http\Validation; 

use Illuminate\Contracts\Validation\Rule; 
use GuzzleHttp\Exception\GuzzleException; 
use GuzzleHttp\Client as Guzzle; 

class ValidEmail implements Rule 
{ 
    protected $client; 
    protected $message = 'Sorry, invalid email address.'; 

    public function __construct(Guzzle $client) 
    { 
     $this->client = $client; 
    } 

    public function passes($attribute, $value) 
    { 
     $response = $this->getMailgunResponse($value); 
    } 

    public function message() 
    { 
     return $this->message; 
    } 

    protected function getMailgunResponse($address) 
    { 
     $request = $this->client->request('GET', 'https://api.mailgun.net/v3/address/validate', [ 
      'query' => [ 
       'api_key' => env('MAILGUN_KEY'), 
       'address' => $address 
      ] 
     ]); 
     dd(json_decode($request->getBody())); 
    } 
} 

Expectation

Je me attends de voir quelque chose comme ceci:

{ 
    +"address": "[email protected]" 
    +"did_you_mean": null 
    +"is_disposable_address": false 
    +"is_role_address": false 
    +"is_valid": false 
    +"parts": { 
     ... 
    } 
} 

Toute aide est très appréciée. J'ai essayé de faire fonctionner cet exemple simple pendant plus de deux heures maintenant. J'espère que quelqu'un avec mon expérience peut aider!

+0

Je l'ai travail, avez-vous besoin encore cela? – user3253002

Répondre

0

Dans votre contrôleur

Essayez ceci:

$validator = Validator::make($request->all(), [ 
    'firstname' => 'required|max:90', 
    'lastname' => 'required|max:120', 
    'company' => 'max:120', 
    'email' => [ 
     'required', 'string', 'max:255', 
     new ValidEmail(new \GuzzleHttp\Client) 
    ], 
    'message' => 'required', 
]); 


if ($validator->fails()) { 
    return redirect()->back() 
     ->withErrors($validator) 
     ->withInput(); 
} 

// if valid ... 
+0

J'ai essayé this si if ($ validator-> fail()) { return redirect() -> précédent() -> withErrors ($ validator) -> withInput(); } else { return "Valide"; } 'et toujours le même – sogeniusio

0

Selon votre itinéraire, la méthode postContact est la méthode pour gérer la route. Cela signifie que la valeur de retour de cette méthode devrait être la réponse que vous voulez voir.

Vous renvoyez un objet Validator, puis Laravel tente de convertir cela en une chaîne pour la réponse. Les objets Validator ne peuvent pas être convertis en chaînes.

Vous devez effectuer la validation, puis renvoyer la réponse correcte en fonction de cette validation. Vous pouvez en savoir plus sur les validateurs manuels dans le documenation here.

En bref, vous avez besoin quelque chose comme ceci:

public function postContact(Request $request) { 
    $validator = Validator::make($request->all(), [ 
     'firstname' => 'required|max:90', 
     'lastname' => 'required|max:120', 
     'company' => 'max:120', 
     'email' => [ 
      'required', 'string', 'max:255', 
      new ValidEmail(new \GuzzleHttp\Client) 
     ], 
     'message' => 'required', 
    ]); 

    // do your validation 
    if ($validator->fails()) { 
     // return your response for failed validation 
    } 

    // return your response on successful validation 
} 
+0

Essayé et toujours le même' if ($ validator-> échoue()) { return redirect() -> précédent() -> withErrors ($ validator) -> withInput() ; } else { return "Valide"; } ' – sogeniusio