2017-06-08 1 views
0

J'ai une fonction de connexion que j'utilise pour connecter les utilisateurs en utilisant des numéros de téléphone. Je reçois les numéros de téléphone de l'utilisateur et ensuite en utilisant le numéro de téléphone pour aller chercher l'adresse e-mail correspondante.Utiliser?: Sténographie dans laravel

Pour que j'ai ce code

public function processLogin(Request $request){ 
    $phone = $request->get('phone'); 
    $getEmail = User::where('users_telephone_number', '=',$phone)->first()->email; 
    $email = $getEmail; 
    $password = $request->get('password'); 
    //echo $email.$password; 
    $data = array(
     'email' => $email, 
     'password' => $password 
     ); 

    if (Auth::attempt($data,true)) { 

Lorsque le numéro est erroné, je reçois cette erreur

Trying to get property of non-object

Pour résoudre le problème que je veux avoir la $getEmail variable égale à [email protected] qui échouera bien comme tous les autres mauvais combos de courriel et de mot de passe.

Comment puis-je assurer que je surprends des erreurs dans cette seule ligne je me sers pour aller chercher le courrier électronique

User::where('users_telephone_number', '=',$phone)->first()->email;

+0

double possible de https://stackoverflow.com/questions/3580461/php-ternary-operator-clarification – Edwin

Répondre

0

Vérifiez l'utilisateur $ d'abord, puis accédez à l'e-mail.

$user = User::where('users_telephone_number', '=',$phone)->first(); 
$email = isset($user) ? $user->email : 'default string'; 
0
$phone = $request->get('phone'); 
$getEmail = User::where('users_telephone_number', '=',$phone)->first(); 
$email = $getEmail ? $getEmail->email : null; 
if(!$email) 
    return abort(400); 
0

Ou test null:

$user = User::where('users_telephone_number', '=',$phone)->first(); 
$email = $user ? $user->email : 'default string'; 

Si votre requête ne renvoie aucun exemple User, il renvoie une valeur nulle par défaut.

Ou ... vous pouvez tester l'e-mail

$password = $request->get('password'); 
$user = User::where('users_telephone_number', '=', $phone)->whereNotNull('email')->first(); 

if ($user && Auth::attempt([$user->email, $password], true)) { 
    ... 
} 
1

Vous essayez imediatly d'obtenir la propriété de courrier électronique d'un objet que vous essayez de chercher. Je suggère d'utiliser la méthode findOrFail, quand il n'y a pas de résultat trouvé NotFoundException sera lancé, ce qui retournera 404 not found.

Dans l'ensemble, il ressemblera à ceci:

$user = User::where('users_telephone_number', '=',$phone)->findOrFail(); 
$email = $user->email;