Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Je suis en train de créer un système pour gérer les détails d'un client, je vérifie si l'id donner dans l'url existe.

    public function view($id) 
    {
        $client = $this->Clients->get($id);
        $this->set(compact('client'));
        if(empty($client))
        {
            $this->Flash->error(__("Le client que vous souhaitez regarder n'existe pas."));     
            return $this->redirect($this->referer(['action' => 'index']));
        }
    }

Ce que je veux

Je cherche à créer une page pour voir les détails d'un client, cela fonctionne mais je voulais contrôler le fait, que si l'id n'existe pas dans la base de données, lui afficher une erreur.

Ce que j'obtiens

Record not found in table "clients"
Cake\Datasource\Exception\RecordNotFoundException

⟩ Cake\ORM\Table->get
APP/Controller\ClientsController.php, line 19

Merci d'avance pour les réponses que vous pourrez m'apporter.

3 réponses


Lartak
Réponse acceptée

Il te suffit de faire par exemple :

$query = $this->Clients->find()->where(['id' => $id]);
if ($query->isEmpty()) {
    $this->Flash->error(__("Le client que vous souhaitez regarder n'existe pas."));
    return $this->redirect($this->referer(['action' => 'index']));
}
$client = $query->first();
$this->set(compact('client'));

Bonjour.
Dans la documentation, il y a :

Vérifier si une Requête Query ou un ResultSet est vide
Vous pouvez utiliser la méthode isEmpty() sur un objet Query ou ResultSet pour voir s’il contient au moins une colonne.
Appeler isEmpty() sur un objet Query va évaluer la requête:

// VérifieCheck une requête.
$query->isEmpty();

// Vérifie les résultats.
$results = $query->all();
$results->isEmpty();

Source.
Il ne te faut donc pas l'utiliser sur la méthode get.
Et puis un conseil, au lieu de set ta variable avant les vérifications sur celle-ic, il serait préférable de le faire après.
Donc dans ton code actuel, tu devrais plutôt faire quelque chose comme :

$client = $this->Clients->get($id);
if (empty($client)) {
    $this->Flash->error(__("Le client que vous souhaitez regarder n'existe pas."));
    return $this->redirect($this->referer(['action' => 'index']));
}
$this->set(compact('client'));

De cette manière tu ne transmets la variable pour la vue que si aucun problème n'a été trouvé.

Bonjour,

Pour commencer je tiens à te remercier pour cette réponse, mais la méthode query va me faire réécrire une requête entière (SELECT * FROM client...), cela est bizarre où c'est moi qui interprête mal la solution ?

Cordialement,