web-dev-qa-db-fra.com

Laravel 5.5 Essayer d'obtenir la propriété 'id' d'un non-objet

Je suis nouveau sur Laravel. J'ai utilisé Laravel version 5.5

Si j'essaye de me connecter avec postman.J'ai obtenu l'erreur "Essayer d'obtenir la propriété 'id' de non-objet". Et la ligne d'erreur est

    private $client;

public function __construct(){
    $this->client = Client::find(1);
}

public function login(Request $request){

    $this->validate($request, [
        'username' => 'required',
        'password' => 'required'
    ]);

    return $this->issueToken($request, 'password'); // this line has error

}

fonction issueToken

public function issueToken(Request $request, $grantType, $scope = ""){

    $params = [
        'grant_type' => $grantType,
        'client_id' => $this->client->id,
        'client_secret' => $this->client->secret,           
        'scope' => $scope
    ];

    if($grantType !== 'social'){
        $params['username'] = $request->username ?: $request->email;
    }

    $request->request->add($params);

    $proxy = Request::create('oauth/token', 'POST');

    return Route::dispatch($proxy);

}

J'ai obtenu la même erreur lors de l'inscription, mais mon utilisateur s'est enregistré avec succès avec une erreur 500 (tentative d'obtention de la propriété 'id' du non-objet)

4
more

L'erreur est due au fait que $this->client Est nul lorsque find() ne peut pas trouver l'enregistrement.

Vous devez être sûr que l'enregistrement existe ou non.

Changement:

$this->client = Client::find(1);

À:

$this->client = Client::findOrFail(1);

Documentation:

De Laravel Eloquent docs , cela générera une erreur 404 Si aucun enregistrement avec l'ID spécifié n'est trouvé.

6
Sapnesh Naik

Assurez-vous d'avoir un enregistrement dans la table de base de données pour le modèle utilisateur avec id = 1. Lorsque vous utilisez User :: find (1) Laravel essaie d'obtenir cet enregistrement de la base de données, si l'enregistrement est absent cela renverra null

0
Nimfus

Dans votre issueToken() méthode-

$client = Client::find(1);
if($client!=null){
     $params = [
       'grant_type' => $grantType,
       'client_id' => $client->id,
       'client_secret' => $client->secret,           
       'scope' => $scope
    ];
}else{
    $params = [
       'grant_type' => $grantType,
       'client_id' => null,
       'client_secret' => null,           
       'scope' => $scope
    ];
}
0
Sohel0415

J'ai eu le même problème lorsque j'essayais d'accéder à un identifiant qui n'existe pas dans ma base de données de projet. Cette $user= user::findOrFail($id); a résolu mon problème.

0
latifa saee